vscode终端中文乱码根本原因是终端解码层(gbk)与进程输出字节流(utf-8)不匹配,必须同步配置终端代码页(chcp 65001)、shell输出编码([console]::outputencoding = utf8)和环境变量(pythonioencoding=utf-8),三者缺一不可;需先执行chcp和python -c "import sys; print(sys.stdout.encoding)"验证错位,再修改settings.json及$profile,并重启vs code生效。

VSCode 终端中文乱码不是文件编码问题,而是终端解码层与进程输出字节流不匹配——必须同步调整终端代码页、Shell 输出编码、环境变量三者,缺一不可。
确认当前终端实际代码页和 Python 输出编码
别猜,先验证。在 VS Code 集成终端中执行两行命令:
-
chcp—— 若返回活动代码页: 936,说明终端正用 GBK 解码 -
python -c "import sys; print(sys.stdout.encoding)"—— 若输出utf-8,就坐实了“UTF-8 输出 → GBK 解码”的错位
只要这两项不一致,乱码必然发生。跳过这步直接改配置,大概率白忙。
settings.json 中必须同时配置三项终端编码参数
只加 "terminal.integrated.defaultEncoding": "utf8" 不够,VS Code 的 Windows 终端集成层需要更底层的干预。在用户 settings.json 中(注意:是最后一个 } 前插入),添加或合并以下字段:
{
"terminal.integrated.env.windows": {
"CHCP": "65001",
"PYTHONIOENCODING": "utf-8"
},
"terminal.integrated.shellArgs.windows": ["/K", "chcp 65001 > nul"],
"terminal.integrated.defaultEncoding": "utf8"
}
关键点:
-
"CHCP": "65001"是环境变量,部分 Shell(如旧版 PowerShell)会读取它;但不能替代shellArgs -
shellArgs中的/K chcp 65001是启动时强制执行,对 cmd 和 PowerShell 都生效 - 如果已有
"terminal.integrated.env.windows",不要重复声明对象,把"CHCP"和"PYTHONIOENCODING"合并进去,否则 JSON 语法错误会导致全部终端配置失效
PowerShell 用户必须额外设置 Console.OutputEncoding
PowerShell 不继承 CHCP 环境变量,也不自动响应 chcp 65001 对其自身 Write-Host 或 Out-String 输出的影响。即使终端设成 UTF-8,PowerShell 进程仍可能以 GBK 写字节。
解决方法:
- 临时生效:在终端中运行
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 永久生效:编辑 PowerShell 的
$PROFILE文件,在末尾添加同一行代码,并保存 - 验证是否生效:
echo "你好" | Out-String—— 如果显示正常,说明已生效
注意:修改 $PROFILE 后需重启 VS Code 才能加载新配置,仅重启终端无效。
调试控制台(Debug Console)无法通过 settings.json 修复
VS Code 的 Debug Console 是独立组件,它不读 settings.json,不继承终端环境变量,也不响应 chcp。哪怕所有终端配置都正确,print("中文") 在 Debug Console 里仍大概率显示为 ??? 或空格。
最可靠的做法是绕过它:
- 在项目根目录的
.vscode/launch.json中,确保配置含"console": "integratedTerminal" - 删掉或注释掉
"console": "internalConsole"(该值已被弃用且编码不可控) - 这样所有
print()、input()、日志都会走你已调好的集成终端,Debug Console 标签页可完全忽略
真正容易被忽略的是:很多人改完终端配置后,没关掉所有已打开的终端实例,导致新配置不生效;或者误以为 Debug Console 也能被统一修复,结果反复调试失败。











