一、问题背景
在 Windows 环境中使用 Codex / CLI 工具(如 Git、Node、Java、Python)时,常见问题包括:
中文乱码(控制台显示异常)
文件写入乱码(出现
???、�、ä¸Â文)编码混乱(ASCII / GBK / UTF-8 混用)
根本原因:
Windows PowerShell 5.1 默认使用系统代码页(CP936/GBK)+ ASCII 输出,导致与 UTF-8 工具链冲突。
二、问题根因分析
典型错误环境:
$OutputEncoding = ASCII
[Console]::InputEncoding = GB2312
[Console]::OutputEncoding = GB2312
chcp = 936问题点:
控制台编码:GBK(936)
PowerShell 输出:ASCII
文件/工具链:UTF-8
=> 三者不一致,必然乱码
三、解决方案总览
推荐路线(强烈建议):
使用 PowerShell 7 + 全链路 UTF-8
核心目标:
控制台:UTF-8
PowerShell:UTF-8
文件:UTF-8
工具链:UTF-8
四、步骤一:安装 PowerShell 7
方法一(推荐)
winget install --id Microsoft.PowerShell -e方法二
下载 MSI 安装包:
https://aka.ms/powershell-release
五、步骤二:确认已进入 pwsh
pwsh
$PSVersionTable.PSVersion期望:
7.x六、步骤三:修复编码(当前会话)
chcp 65001
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$OutputEncoding = [System.Text.UTF8Encoding]::new($false)验证:
$OutputEncoding
[Console]::InputEncoding
[Console]::OutputEncoding
chcp
应全部为 UTF-8 / 65001
七、步骤四:写入 PowerShell 7 Profile(永久生效)
1. 查看路径
$PROFILE
通常为:
C:\Users\Administrator\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
2. 写入配置
New-Item -ItemType Directory -Path (Split-Path $PROFILE) -Force | Out-Null
@'
Write-Host "[pwsh PROFILE LOADED]"
chcp 65001 > $null
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$OutputEncoding = [System.Text.UTF8Encoding]::new($false)
'@ | Set-Content -Path $PROFILE -Encoding utf8
八、步骤五:重启验证
重新打开 pwsh:
$OutputEncoding
[Console]::InputEncoding
[Console]::OutputEncoding
chcp期望:
UTF-8
65001
并看到:
[pwsh PROFILE LOADED]如果重启异常,且提示:
Windows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6 . :
无法加载文件 C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁 止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 3 + . 'C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.Power ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\Administrator>这是一个典型的 PowerShell 执行策略(Execution Policy)拦截 profile 脚本的问题,本质不是报错,而是安全策略阻止脚本运行。
使用下面命令仅修改当前用户:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
解释:本地脚本 ✅ 允许执行,网络下载脚本 ⚠️ 需要签名,不影响系统其他用户
👉 执行后重启 PowerShell 即可
九、步骤六:中文读写测试
"中文测试:你好,世界"
$txt = "中文测试:你好,世界!UTF-8"
Set-Content -Path .\test-utf8.txt -Value $txt -Encoding utf8
Get-Content -Path .\test-utf8.txt -Encoding utf8
全部正常 => 环境 OK
十、VS Code 配置
settings.json
{
"terminal.integrated.defaultProfile.windows": "PowerShell",
"files.encoding": "utf8",
"files.autoGuessEncoding": false
}十一、Git 编码建议
git config --global core.quotepath false
git config --global i18n.commitEncoding utf-8
git config --global i18n.logOutputEncoding utf-8十二、Java 项目编码
Maven
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>JVM
-Dfile.encoding=UTF-8十三、旧文件注意事项(重点)
如果项目中存在:
GBK
ANSI
⚠️ 不要直接让 Codex 修改
建议流程:
识别编码
转换为 UTF-8
再进行修改
十四、PowerShell 5.1 的问题(总结)
默认 ASCII 输出
默认 CP936
执行策略复杂
模块容易冲突(PSReadLine)
结论:
不建议继续使用 PowerShell 5.1 做开发环境
十五、最终结论
最佳实践
使用 PowerShell 7(pwsh)
全链路统一 UTF-8
VS Code + Terminal 同步
一句话总结
乱码的本质不是 Codex 问题,而是 Windows 编码体系混乱导致的。
十六、最终标准环境
pwsh (PowerShell 7)
UTF-8 (65001)
VS Code UTF-8
Git UTF-8
Project UTF-8达到该状态后:
✅ 中文不会乱码
✅ Codex 修改文件安全
✅ 工具链一致稳定
