在 Windows 上用 OpenAI Codex 修改代码,如果文件里有中文,改完后出现乱码,这通常不是编辑器坏了,而是终端编码链路出了问题。
问题大多出在这里:Codex 的文件修改流程会调用 PowerShell 执行脚本,而 Windows 默认常见的 PowerShell 5.1 仍然使用 GBK 或系统本地编码。你的代码文件和 VS Code 一般是 UTF-8,模型处理文本时也是 UTF-8。终端一旦在读写过程中做了错误的编码转换,中文就会被写坏。
这个问题并不少见,很多人在 OpenAI Codex 的相关讨论里都遇到过,尤其是在 Windows 环境。
先说结论
最稳妥的做法是两步一起做:
1. 让 VS Code 固定使用 UTF-8。
2. 把终端切换到 PowerShell 7,并强制它使用 UTF-8。
只改其中一项,往往不够彻底。
方案一,先固定 VS Code 文件编码
打开 VS Code,按 `Ctrl + Shift + P`,输入 `Preferences: Open Settings (JSON)`,加入或确认下面这段配置:
{
"files.encoding": "utf8",
"files.autoGuessEncoding": false,
"files.insertFinalNewline": true
}
这一步的重点有两个:
- `files.encoding` 固定为 `utf8`
- `files.autoGuessEncoding` 关闭,避免 VS Code 猜错编码
方案二,改用 PowerShell 7,并强制 UTF-8
这是解决乱码最关键的一步。
1,先安装 PowerShell 7
建议从 Microsoft Store 或 PowerShell 官网安装。安装完成后,确认系统里可用的是 `pwsh.exe`,不是旧的 `powershell.exe`。
2,把 VS Code 默认终端切到 PowerShell 7
在 VS Code 设置中搜索 `terminal.integrated.defaultProfile.windows`,把默认终端设置成 PowerShell 7 对应的配置,也就是 `pwsh.exe`。
你也可以直接在 `settings.json` 中确认有类似配置:
{
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
注意,这里的 `PowerShell` 必须对应 PowerShell 7,而不是 Windows PowerShell 5.1。
3,在 PowerShell 7 的 Profile 里永久启用 UTF-8
先在 PowerShell 7 中执行:
if (!(Test-Path -Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILE
打开配置文件后,加入下面这段内容:
# 强制 UTF-8 编码,避免 Codex / VS Code 修改文件时出现中文乱码
chcp 65001 > $null
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
$PSDefaultParameterValues['*:Encoding'] = 'utf8NoBOM'
# 可选,让常见文件读写命令默认使用 UTF-8
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8NoBOM'
$PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8NoBOM'
$PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8NoBOM'
$PSDefaultParameterValues['Get-Content:Encoding'] = 'utf8NoBOM'
保存后,重启 VS Code 和终端。
如果装了 PowerShell 7,输出编码还是 GB2312
有些人装完 PowerShell 7 以后,执行下面这条命令,发现输出仍然不是 UTF-8:
[Console]::OutputEncoding
结果类似这样:
EncodingName : Chinese Simplified (GB2312)
WebName : gb2312
HeaderName : gb2312
BodyName : gb2312
WindowsCodePage : 936
CodePage : 936
这说明你虽然装了 PowerShell 7,但当前终端会话仍然没有切到 UTF-8。
按下面顺序处理即可。
第一步,确认 VS Code 真的在用 pwsh
打开 VS Code 设置,检查 `terminal.integrated.defaultProfile.windows`。
如果当前仍然指向旧版 PowerShell,那么 Codex 依旧可能走老编码链路,乱码问题不会消失。
第二步,检查 PowerShell 7 的 Profile 是否生效
重新打开终端后,再执行一次:
[Console]::OutputEncoding
如果还是 `936`,通常说明 Profile 没有生效,或者内容没写对。
第三步,再检查当前代码页
执行:
chcp
正常情况下应该看到:
Active code page: 65001
只要 `OutputEncoding` 是 UTF-8,`chcp` 也是 `65001`,编码环境基本就对了。
建议你最终保留的 VS Code 配置
`settings.json` 建议至少保留下面三项:
{
"files.encoding": "utf8",
"files.autoGuessEncoding": false,
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
常见问题
使用 PowerShell 7 后,fnm 不能用了
这一般不是编码问题,而是 PowerShell 7 的初始化环境没有把 `fnm` 挂进去。
还是先打开 Profile:
if (!(Test-Path -Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILE
然后追加这一行:
fnm env --use-on-cd --version-file-strategy=recursive --shell powershell | Out-String | Invoke-Expression
保存后重新打开终端,通常就恢复了。
最后总结
如果你想彻底解决 Codex 修改文件后的中文乱码,不要只盯着编辑器。
真正要改的是整条链路:
- VS Code 文件编码固定为 UTF-8
- VS Code 默认终端改为 PowerShell 7
- PowerShell 7 的 Profile 强制启用 UTF-8
这三步做完,基本就能把大多数 Windows 下的中文乱码问题处理干净。