Codex 中文乱码通常不是“缺少中文包”,而是终端输出编码、文件编码或字体不一致。先判断乱码出现在哪里,再修改对应层;不要为了终端乱码安装来源不明的客户端汉化补丁。
先区分四类问题
| 表现 | 更可能的原因 |
|---|---|
| App 按钮是英文,但中文对话正常 | 界面语言,不是乱码 |
| CLI 回复中的中文变成方框 | 终端字体缺少中文字形 |
| 中文变成问号或错误字符 | 输出编码或代码页不一致 |
| 只有某个源码文件乱码 | 文件保存编码不正确 |
| Codex 修改后文件才乱码 | 写文件的 shell、脚本或原始编码被错误转换 |
| 读取正常但命令输出乱码 | 子进程输出编码与终端解码不一致 |
界面语言问题请看 Codex 中文设置教程。下面主要处理 CLI、PowerShell 和文件内容乱码。
1. 换到现代 Windows 终端
优先使用 Windows Terminal 或当前版本 PowerShell。先关闭旧终端窗口,再打开新窗口运行:
codex --version
如果版本号正常但中文显示为方框,在终端设置中选择包含中文字符的字体。字体问题不会通过修改 Codex 配置解决。
2. 临时切换当前 PowerShell 会话为 UTF-8
可以只对当前终端会话设置 UTF-8:
$utf8 = [System.Text.UTF8Encoding]::new()
[Console]::InputEncoding = $utf8
[Console]::OutputEncoding = $utf8
$OutputEncoding = $utf8
然后重新运行出现乱码的命令。先用临时设置验证,不要一开始就修改全局 PowerShell 配置。
某些旧程序仍依赖 Windows 代码页,可以在当前窗口尝试:
chcp 65001
chcp 只影响当前控制台代码页,不能修复已经用错误编码保存的文件。
3. 确认文件本身的编码
如果只有 README、日志或源码文件乱码,用 VS Code 查看右下角编码,并尝试“使用编码重新打开”。确认内容正确后,再明确保存为 UTF-8。
PowerShell 读取文本时可以显式指定:
Get-Content -Encoding utf8 .\README.md
不要在没有备份时批量转换整个仓库。GBK、UTF-8 和带 BOM 的 UTF-8 混用时,错误转换可能永久破坏内容。
修改文件后才出现乱码
先用 Git diff 或备份判断字节内容是否真的变化:
- 原文件在修改前是什么编码。
- Codex 调用了编辑器、PowerShell、Bash 还是项目脚本写回文件。
- 乱码只出现在终端预览,还是 VS Code 重新打开后也存在。
- 文件是否被整文件重写,而不是只改动目标行。
如果 VS Code 显示错误编码,先使用“使用编码重新打开”确认原内容,再决定是否“使用编码保存”。重新打开只改变解码方式,保存才会改写文件字节。
生成或读取中文乱码
- 生成的新文件乱码:检查写文件命令是否显式指定 UTF-8。
Get-Content读取乱码:尝试-Encoding utf8,并核对 PowerShell 版本。- Bash 输出乱码:检查
locale和子进程自己的编码。 - CSV 打开乱码:先确认写出编码和读取软件的默认编码,不要把 CSV 问题直接归因于 Codex。
4. 判断是 Codex 输出还是子进程输出
让 Codex 运行构建、测试或脚本时,乱码可能来自被调用程序。先直接在同一个终端手动运行原命令:
- 手动运行也乱码:检查该程序和终端编码。
- 只有 Codex 运行时乱码:检查代理使用的是 PowerShell 还是 WSL、是否启动了不同 shell。
- 只有日志文件乱码:检查写日志的程序编码。
5. VS Code 里中文设置不生效
“让 Codex 用中文回答”、VS Code 界面语言和文件编码是三个不同设置:
- 回答语言:写在当前提示或项目
AGENTS.md。 - VS Code 菜单语言:由编辑器语言包控制。
- 文件内容编码:由文件本身和 VS Code 编码设置控制。
更改其中一个不会自动修复另外两个。若只有 Codex 面板异常,检查扩展日志;若整个文件都异常,回到文件编码排查。
6. WSL 中乱码
在 WSL 里检查区域设置:
locale
printf '中文测试\n'
如果 WSL 自己可以正确显示中文,但 Windows PowerShell 不行,说明问题位于 Windows 终端层。反过来则检查 Linux locale、字体和文件编码。
WSL 的安装和运行环境区别见:Codex WSL2 安装与配置。
仍然乱码时记录什么
保存以下信息再排查:
- 乱码发生在桌面 App、PowerShell、Windows Terminal 还是 WSL
codex --version输出$PSVersionTable.PSVersion输出- 具体命令和原始乱码文本
- 文件在编辑器中显示的编码
- 是否只有某个项目或某个命令会出现
这些信息能把问题缩小到界面、终端、文件或子进程,避免无效重装。