配置、安全与排错

Codex Windows 中文乱码解决方法

Codex CLI、PowerShell 和 Windows 终端中文乱码排错,区分界面语言、文件编码、终端编码与字体问题。

编辑:Codex Guide 编辑 最后更新:

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 或备份判断字节内容是否真的变化:

  1. 原文件在修改前是什么编码。
  2. Codex 调用了编辑器、PowerShell、Bash 还是项目脚本写回文件。
  3. 乱码只出现在终端预览,还是 VS Code 重新打开后也存在。
  4. 文件是否被整文件重写,而不是只改动目标行。

如果 VS Code 显示错误编码,先使用“使用编码重新打开”确认原内容,再决定是否“使用编码保存”。重新打开只改变解码方式,保存才会改写文件字节。

生成或读取中文乱码

  • 生成的新文件乱码:检查写文件命令是否显式指定 UTF-8。
  • Get-Content 读取乱码:尝试 -Encoding utf8,并核对 PowerShell 版本。
  • Bash 输出乱码:检查 locale 和子进程自己的编码。
  • CSV 打开乱码:先确认写出编码和读取软件的默认编码,不要把 CSV 问题直接归因于 Codex。

4. 判断是 Codex 输出还是子进程输出

让 Codex 运行构建、测试或脚本时,乱码可能来自被调用程序。先直接在同一个终端手动运行原命令:

  1. 手动运行也乱码:检查该程序和终端编码。
  2. 只有 Codex 运行时乱码:检查代理使用的是 PowerShell 还是 WSL、是否启动了不同 shell。
  3. 只有日志文件乱码:检查写日志的程序编码。

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 输出
  • 具体命令和原始乱码文本
  • 文件在编辑器中显示的编码
  • 是否只有某个项目或某个命令会出现

这些信息能把问题缩小到界面、终端、文件或子进程,避免无效重装。

参考资料