Codex 编辑文件乱码
解决 Codex 修改文件后中文乱码问题:根源在终端编码,不在 VS Code!
关键词:Codex、中文乱码、VS Code、PowerShell、UTF-8、终端编码、无 BOM
问题现象
使用 GitHub Copilot(或 Codex)修改包含中文的文件时,保存后打开发现中文变成乱码,比如:
æˆ‘çˆ±ä¸æ–‡ → 实际应为 “我爱中文”
很多人第一反应是:“是不是 VS Code 编码设置错了?” 但其实——问题不在编辑器,而在终端!
真正的根源
Codex 并不直接在 VS Code 编辑器里写文件,而是通过终端(Terminal)执行命令(如 echo、sed、PowerShell 脚本等)来修改文件内容。
流程如下:
-
Codex 生成修改命令(例如
Set-Content file.txt "你好") -
命令在 终端中执行
-
终端以当前编码将字节写入文件
-
VS Code 读取文件 → 如果编码不匹配 → 乱码
所以,乱码的根本原因是:终端编码 ≠ 编辑器编码。
解决方案:双端统一为 UTF-8
要彻底解决,必须同时配置:
VS Code 使用 UTF-8
终端(PowerShell/CMD)默认使用 UTF-8
第一步:配置 VS Code 为 UTF-8
打开 VS Code 设置(Ctrl + ,),切换到 settings.json,添加:
{"files.encoding": "utf8","files.autoGuessEncoding": true}
-
"files.encoding": "utf8":默认以 UTF-8 保存文件 -
"files.autoGuessEncoding": true:打开文件时自动检测编码(尤其对带 BOM 的文件友好)
这一步确保 VS Code 读写一致。
第二步:配置 PowerShell 终端为 UTF-8(重点)
:one: 确认你用的是哪个 PowerShell?
在终端运行:
$PSVersionTable.PSVersion
-
5.x → Windows 自带的 Windows PowerShell(旧版)
-
7.x → PowerShell 7+(推荐升级)
强烈建议升级到 PowerShell 7,对 UTF-8 支持更好。
方法一:使用 winget(推荐)
在 PowerShell 5.1 中执行:
winget install --id Microsoft.PowerShell -e
安装完成后,关闭所有终端窗口并重新打开。
验证是否安装成功
pwsh -v
如果输出类似
PowerShell 7.x.x
:two: 找到你的 Profile 文件路径
$PROFILE
常见路径:
Windows PowerShell 5.1: C:\Users\<用户名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PowerShell 7+: C:\Users\<用户名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
:three: 编辑 Microsoft.PowerShell_profile.ps1
:warning: 注意:不要用 Add-Content -Encoding UTF8,它会写入 带 BOM 的 UTF-8,可能引发其他工具兼容问题。 我们需要的是 UTF-8 无 BOM。
修改内容如下:
# UTF-8 console/file encoding
chcp 65001 | Out-Null
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new()
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
$OutputEncoding = [System.Text.UTF8Encoding]::new()
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8'
$PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8'
$PSDefaultParameterValues['Get-Content:Encoding'] = 'utf8'
$PSDefaultParameterValues['Select-String:Encoding'] = 'utf8'
:four: 验证是否生效
'中文测试' | Set-Content .\test.txt
Get-Content .\test.txt
如果输出 “中文测试” 而非乱码,说明配置成功!