Windows 下 Codex 中文乱码问题解决方案

390 阅读2分钟

一、问题结论

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 自动生成

操作:

  1. 打开 VS Code
  2. Terminal → Select Default Profile
  3. 选择 PowerShell(pwsh)
  4. 新开终端

验证:

$PSVersionTable.PSEdition

输出应为:

Core