codex读取中文文件乱码源于powershell编码链路不一致;需先确认文件真实编码(如gbk),再用-encoding default或转utf-8无bom格式解决,调用时须用双引号包裹中文路径并避免foreach-object编码重置。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Codex读取中文文件时出现乱码,不是因为文件本身编码错误,而是PowerShell执行环境与Codex捕获层之间的编码链路不一致——即使命令里写了-Encoding UTF8,后续stdout/stderr解码环节仍可能被系统code page或profile脚本覆盖。
确认文件真实编码
先用VS Code或Notepad++打开目标中文文件,右下角查看实际编码。如果显示“GBK”或“GB2312”,就【不能直接用-Encoding UTF8】,否则PowerShell会按UTF-8强行解码字节流,必然乱码。
用PowerShell命令验证:Get-Content -Path "test.txt" -Encoding Default | Select-Object -First 1。这个Default参数会按系统当前ANSI代码页(如中文Windows是GBK)读取,若显示正常,说明文件确实是GBK编码。
匹配编码执行读取
方法一:按实际编码指定参数
如果上一步确认是GBK编码,执行:Get-Content -Path "test.txt" -Encoding Default 或 Get-Content -Path "test.txt" -Encoding OEM。前者走系统ANSI页,后者走OEM页(cmd默认),两者在简体中文系统下通常等效。
方法二:统一转为UTF-8再读(推荐长期项目)
用Notepad++打开文件→“编码”菜单→“转为UTF-8无BOM格式”→保存。之后所有PowerShell命令都可用-Encoding UTF8安全读取。这步不可跳过,否则Codex每次调用都会因环境波动导致结果不稳定。
绕过PowerShell编码陷阱
第一步:在Codex对话中输入指令时,明确要求使用.NET原生读取:[System.IO.File]::ReadAllText("test.txt", [System.Text.Encoding]::GetEncoding("GBK"))
第二步:如果文件路径含中文,必须用双引号包裹,否则PowerShell解析器会在空格或括号处截断路径——这是新手最常踩的坑,报错信息却只显示“找不到路径”,根本看不出是引号缺失。
第三步:对批量中文文件,避免用Get-ChildItem *.txt | ForEach-Object { Get-Content $_.FullName -Encoding Default }这种写法。因为ForEach-Object内部会重置编码上下文,某些文件可能被误判。改用单次调用:Get-Content -Path (Get-ChildItem *.txt).FullName -Encoding Default,让PowerShell一次性加载全部路径再统一解码。











