Win11 Codex命令行乱码解决:终端UTF-8编码格式设置详解
在 Windows 11 中使用 Codex 输出中文时,终端显示为“æˆ‘çˆ±ä¸æ–‡”或一连串问号?问题通常不是代码逻辑出错,而是终端将 UTF-8 编码的字节流错误地当作 GBK 解码。整条处理链路中任何一个环节编码不匹配,中文就会彻底损坏。解决策略非常直接:先启用系统级 UTF-8 支持,再安装并设为默认的 PowerShell 7,接着强制固定 UTF-8 输出链,最后确保 VS Code 的编码设置也同步统一。下面逐步执行。
开启系统级 UTF-8 支持(必须重启)
这一步调整的是 Windows 底层针对非 Unicode 程序的默认编码处理方式,直接影响 cmd、PowerShell 5.1 以及记事本等传统工具的行为。如果不开启,后续配置的效果将大打折扣。
按下 Win + I 进入设置 → 时间和语言 → 语言和区域 → 点击右侧“相关设置”中的“管理语言设置” → 在弹出窗口切换到“管理”选项卡 → 点击“更改系统区域设置” → 勾选【Beta版:使用Unicode UTF-8提供全球语言支持】 → 点“确定” → 重启电脑。
重启后,cmd 和旧版 PowerShell 会自动切换到 UTF-8 代码页 65001。但注意不要依赖它们运行 Codex——这只是为整个系统奠定基础。
安装 PowerShell 7 并设为默认终端
PowerShell 5.1(powershell.exe)作为系统自带的老版本,对 UTF-8 的支持极其不可靠。必须替换为现代的 pwsh(PowerShell 7),它跨平台、可配置,默认行为与 Linux 一致,省去大量兼容性麻烦。
在任意终端中执行:winget install --id Microsoft.PowerShell。
如果 winget 无法识别,先去 Microsoft Store 搜索“Windows Terminal”安装后再试;安装完成后按 Win 键搜索“Terminal”打开。
在 Windows Terminal 中点击右上角下拉箭头 ∨ → 设置 → 左侧选择“启动” → 将“默认配置文件”改为【PowerShell 7 (pwsh)】 → 点“保存”。
⚠️ 关键警示:绝对不要选择“Windows PowerShell”或“Command Prompt”,它们仍是 GBK 陷阱。
配置 pwsh 强制 UTF-8 输出链路
PowerShell 7 本身并不会自动启用 UTF-8,必须手动注入编码声明,否则 Set-Content、Out-File 等命令仍可能写入 UTF-16 或系统默认编码。
第一步:在 pwsh 中执行 New-Item -Path $PROFILE -ItemType File -Force 创建配置文件(若不存在)。
第二步:运行 notepad $PROFILE 用记事本打开该文件。
第三步:粘贴以下全部内容,保存并关闭:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $OutputEncoding = [System.Text.Encoding]::UTF8 $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' $PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8' $PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8'
第四步:关闭当前 Terminal,重新打开一个新 pwsh 窗口,输入 [Console]::OutputEncoding —— 返回结果必须为【UTF-8】,而不是 System.Text.UTF8Encoding 对象或空值。
同步 VS Code 文件编码设置
Codex 生成的代码最终会被 VS Code 读取。如果编辑器用 UTF-8 打开,但文件实际以 GBK 写入,乱码照样出现。必须确保 VS Code 的保存和读取都走 UTF-8。
按 Ctrl + , 打开设置 → 左上角点击“打开设置(JSON)” → 在花括号内添加两行:
"files.encoding": "utf8", "files.autoGuessEncoding": true
保存后,新创建的文件默认即为 UTF-8,旧文件打开时也能自动识别 BOM 或常见编码。
验证乱码是否消失
完成以上配置后,如何确认问题已解决?尝试以下方法:
方法一:在 pwsh 中直接执行 echo "你好世界" > test.txt,然后用 VS Code 打开 test.txt —— 文字清晰无 ? 无乱码。
方法二:运行 Codex 指令,生成包含中文注释的代码文件,检查文件内容和编译结果是否正常。
方法三:在 pwsh 中输入 $PSVersionTable.PSEdition,确认返回【Core】而非 Desktop —— 这是 PowerShell 7 正在运行的确切证据。
