Codex 教程

Codex中文乱码

2026-03-11
282 views
Codex中文乱码

Codex 修改文件导致中文乱码的解决办法

问题结论

编辑器编码 和 终端编码 必须保持一致。
在使用 Codex 修改文件时,有时会出现 中文乱码 的情况

image-20251019165022152

image-20251019165122901

打开 VS Code 设置(Ctrl + ,),在 settings.json 里增加以下配置:

json
"files.encoding": "utf8",
"files.autoGuessEncoding": true
  • files.encoding: 默认使用 UTF-8 保存文件

  • files.autoGuessEncoding: 打开文件时自动检测是否存在 BOM/其他编码

    这样 VS Code 打开和保存文件时,都能尽量保持编码一致。

2. 终端编码修改(PowerShell/命令行)

步骤 1:先查看自己使用的 PowerShell 版本

在终端执行:

shell
$PSVersionTable.PSVersion
  • 如果是 5.x → 说明你在用 Windows 自带的 Windows PowerShell(旧版)。

  • 如果是 7.x → 说明你在用 PowerShell 7 (pwsh)(新版,建议用这个)。

不同版本的配置文件路径不一样,后面修改时要对应。

步骤 2:检查 profile 文件路径

在终端输入:

shell
$PROFILE

它会显示当前版本 PowerShell 的配置文件路径,比如:

  • Windows PowerShell 5.1

    text
    C:\Users\<用户名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  • PowerShell 7

    text
    C:\Users\<用户名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
    

把$PROFILE返回的路径直接放入搜索栏里,如果能搜索到则直接进入步骤4

image-20251019170513266

步骤 3:如果文件不存在,先创建

在终端直接运行

text
if (!(Test-Path -Path $PROFILE)) {
    New-Item -ItemType File -Force -Path $PROFILE
}

步骤 4:写入 UTF-8 初始化配置

执行以下命令,把 UTF-8 配置写入 profile 文件:

text
$utf8Block = @'
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'
'@

Add-Content -Path $PROFILE -Value $utf8Block -Encoding UTF8

如果还有报错,那说明修改的是5.1版本的写入有问题,有人反馈了一下命令还是乱码,可能是5.1版本的windows命令
Windows PowerShell 5.1 里,UTF8 实际上会写成 UTF-8 with BOM。
结果就是:虽然你指定了 UTF-8,但多了 BOM 头,VS Code 或 Codex 再读时,就可能出现 �? 这种乱码现象。这个地方建议升级7,如果不想升级那么需要修改一下这个函数,

text
$utf8Block = @'
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'
'@

# 先读取现有 profile 内容(如果有)
$profileContent = ""
if (Test-Path $PROFILE) {
    $profileContent = Get-Content -Path $PROFILE -Raw
}

# 如果还没写过,就追加一份,确保文件保存为 UTF-8 无 BOM
if ($profileContent -notmatch 'Console::OutputEncoding') {
    $newContent = $profileContent + "`r`n" + $utf8Block
    [System.IO.File]::WriteAllText($PROFILE, $newContent, (New-Object System.Text.UTF8Encoding($false)))
}

步骤 5:让配置立即生效

text
. $PROFILE

步骤 6:验证终端是否是 UTF-8

text
'中文测试' | Set-Content -Path .\utf8_test.txt
Get-Content .\utf8_test.txt

能正常显示 中文测试,说明配置成功 ✅。