一、问题结论
Codex 中文乱码不是 Codex 的 bug。根因是 Windows 终端默认编码体系(历史代码页)与现代 CLI 工具(UTF-8)不一致。
唯一正确的解决方向:
使用 PowerShell 7(pwsh)+ 明确 UTF-8 输出, 让 Windows CLI 行为对齐 Linux / macOS 的默认假设。
二、Codex 为什么会乱码
- Codex(CLI / VS Code 插件)基于 Node.js
- Node 与现代 CLI 默认使用 UTF-8
- Linux / macOS 全链路默认 UTF-8
- Windows CLI(cmd / PowerShell 5.1)仍使用 历史代码页(常见 936 / GBK)
导致链路如下:
Codex(UTF-8) → Windows Console(GBK / 936) → VS Code 终端 → 中文乱码
三、cmd / PowerShell 5.1 / pwsh 的真实差异
cmd.exe
- DOS 时代遗产
- 只传文本,强依赖代码页
- 仅作为兼容层存在 不适合现代 CLI / AI 工具
Windows PowerShell 5.1(powershell.exe)
- 系统组件,随 Windows 自带
- 基于 .NET Framework
- 默认继承旧控制台编码
- 不会升级、不会替换
PowerShell 7(pwsh)
- 现代 PowerShell,基于 .NET(跨平台)
- 面向开发者与自动化
- 可控 UTF-8
- Windows / Linux / macOS 行为一致 应当使用的终端
对比总结:
| 工具 | 定位 |
|---|---|
| cmd | 兼容层 |
| PowerShell 5.1 | 系统管理遗产 |
| pwsh(PowerShell 7) | 现代开发者终端 |
四、为什么 Linux 下 Codex 更好用?
Linux / macOS 默认:
系统 locale = UTF-8
终端 = UTF-8
Shell = UTF-8
CLI = UTF-8
Windows(默认):
GUI = Unicode
CLI = 历史代码页
Linux 无需声明, Windows 必须显式声明 UTF-8。
五、最终解决方案(可执行)
Step 1:安装 PowerShell 7
winget install --id Microsoft.PowerShell
验证:
pwsh --version
Step 2:进入 pwsh(不要用 cmd / PS5.1)
pwsh
验证:
$PSVersionTable.PSEdition
必须输出:
Core
Step 3:为 pwsh 明确设置 UTF-8(关键)
1️⃣ 创建 profile(如不存在)
New-Item -ItemType File -Path $PROFILE -Force
2️⃣ 编辑 profile
notepad $PROFILE
3️⃣ 写入以下内容(原样复制)
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new()
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
$OutputEncoding = [System.Text.UTF8Encoding]::new()
保存并关闭。
Step 4:重启终端并验证 UTF-8
[Console]::OutputEncoding.CodePage
必须输出:
65001
六、VS Code 如何正确使用 pwsh(重要说明)
- VS Code 会自动识别 pwsh
- 用户只需选择一次默认终端
- 终端 profiles 配置由 VS Code 自动生成
操作:
- 打开 VS Code
Terminal → Select Default Profile- 选择 PowerShell(pwsh)
- 新开终端
验证:
$PSVersionTable.PSEdition
输出应为:
Core