Windows + PowerShell + Codex 中文乱码完整解决方案

Windows + PowerShell + Codex 中文乱码完整解决方案


一、问题背景

在 Windows 环境中使用 Codex / CLI 工具(如 Git、Node、Java、Python)时,常见问题包括:

  • 中文乱码(控制台显示异常)

  • 文件写入乱码(出现 ???中文

  • 编码混乱(ASCII / GBK / UTF-8 混用)

根本原因:

Windows PowerShell 5.1 默认使用系统代码页(CP936/GBK)+ ASCII 输出,导致与 UTF-8 工具链冲突。


二、问题根因分析

典型错误环境:

$OutputEncoding = ASCII
[Console]::InputEncoding = GB2312
[Console]::OutputEncoding = GB2312
chcp = 936

问题点:

  • 控制台编码:GBK(936)

  • PowerShell 输出:ASCII

  • 文件/工具链:UTF-8

=> 三者不一致,必然乱码


三、解决方案总览

推荐路线(强烈建议):

使用 PowerShell 7 + 全链路 UTF-8

核心目标:

  • 控制台:UTF-8

  • PowerShell:UTF-8

  • 文件:UTF-8

  • 工具链:UTF-8


四、步骤一:安装 PowerShell 7

方法一(推荐)

winget install --id Microsoft.PowerShell -e

方法二

下载 MSI 安装包:
https://aka.ms/powershell-release


五、步骤二:确认已进入 pwsh

pwsh
$PSVersionTable.PSVersion

期望:

7.x

六、步骤三:修复编码(当前会话)

chcp 65001
[Console]::InputEncoding  = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$OutputEncoding           = [System.Text.UTF8Encoding]::new($false)

验证:

$OutputEncoding
[Console]::InputEncoding
[Console]::OutputEncoding
chcp

应全部为 UTF-8 / 65001


七、步骤四:写入 PowerShell 7 Profile(永久生效)

1. 查看路径

$PROFILE

通常为:

C:\Users\Administrator\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

2. 写入配置

New-Item -ItemType Directory -Path (Split-Path $PROFILE) -Force | Out-Null
@'
Write-Host "[pwsh PROFILE LOADED]"
chcp 65001 > $null
[Console]::InputEncoding  = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$OutputEncoding           = [System.Text.UTF8Encoding]::new($false)
'@ | Set-Content -Path $PROFILE -Encoding utf8

八、步骤五:重启验证

重新打开 pwsh:

$OutputEncoding
[Console]::InputEncoding
[Console]::OutputEncoding
chcp

期望:

  • UTF-8

  • 65001

并看到:

[pwsh PROFILE LOADED]

如果重启异常,且提示:

Windows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。 
尝试新的跨平台 PowerShell https://aka.ms/pscore6 . : 
无法加载文件 C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁 止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 
所在位置 行:1 字符: 3 + . 'C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.Power ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess 
PS C:\Users\Administrator>

这是一个典型的 PowerShell 执行策略(Execution Policy)拦截 profile 脚本的问题,本质不是报错,而是安全策略阻止脚本运行。

使用下面命令仅修改当前用户:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

解释:本地脚本 ✅ 允许执行,网络下载脚本 ⚠️ 需要签名,不影响系统其他用户

👉 执行后重启 PowerShell 即可


九、步骤六:中文读写测试

"中文测试:你好,世界"
$txt = "中文测试:你好,世界!UTF-8"
Set-Content -Path .\test-utf8.txt -Value $txt -Encoding utf8
Get-Content -Path .\test-utf8.txt -Encoding utf8

全部正常 => 环境 OK


十、VS Code 配置

settings.json

{
  "terminal.integrated.defaultProfile.windows": "PowerShell",
  "files.encoding": "utf8",
  "files.autoGuessEncoding": false
}

十一、Git 编码建议

git config --global core.quotepath false
git config --global i18n.commitEncoding utf-8
git config --global i18n.logOutputEncoding utf-8

十二、Java 项目编码

Maven

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

JVM

-Dfile.encoding=UTF-8

十三、旧文件注意事项(重点)

如果项目中存在:

  • GBK

  • ANSI

⚠️ 不要直接让 Codex 修改

建议流程:

  1. 识别编码

  2. 转换为 UTF-8

  3. 再进行修改


十四、PowerShell 5.1 的问题(总结)

  • 默认 ASCII 输出

  • 默认 CP936

  • 执行策略复杂

  • 模块容易冲突(PSReadLine)

结论:

不建议继续使用 PowerShell 5.1 做开发环境


十五、最终结论

最佳实践

  • 使用 PowerShell 7(pwsh)

  • 全链路统一 UTF-8

  • VS Code + Terminal 同步

一句话总结

乱码的本质不是 Codex 问题,而是 Windows 编码体系混乱导致的。


十六、最终标准环境

pwsh (PowerShell 7)
UTF-8 (65001)
VS Code UTF-8
Git UTF-8
Project UTF-8

达到该状态后:

✅ 中文不会乱码
✅ Codex 修改文件安全
✅ 工具链一致稳定