Posted in: AI

Windows 下 Codex 修改代码后中文乱码,怎么彻底解决

在 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 下的中文乱码问题处理干净。

订阅
提醒
guest

0 评论
最新
最早的 投票最多的
在线反馈
显示所有评论
Back to Top