vscode终端中文乱码主因是终端进程未启用utf-8编码,需同时配置chcp 65001、pythonioencoding=utf8及支持中文的等宽字体链,并重启终端生效。

VSCode内部终端显示中文乱码,90%不是文件编码问题,而是终端进程启动时没用 UTF-8 编码——chcp 65001 没生效、PYTHONIOENCODING 没透传、字体链没兜住中文,三者缺一不可。
确认终端当前代码页是不是GBK(chcp 输出 936)
这是所有排查的起点。在 VSCode 集成终端里直接运行:
chcp
如果输出 活动代码页: 936,说明终端正以 GBK 模式运行,而 Python/Node 等工具默认按 UTF-8 输出字节,解码必然错位。这步不能跳过,否则后续配置可能全白设。
- 输出
65001:说明代码页已对齐,问题大概率出在字体或环境变量透传上 - 输出其他值(如
437、1252):同样需切到65001,Windows 下只有65001是标准 UTF-8 代码页 - PowerShell 用户注意:
chcp命令本身在 PowerShell 中有效,但不改变[Console]::OutputEncoding,后者只影响 .NET 控制台 API,对 Python 子进程无效
在 settings.json 中强制终端启动即用 UTF-8
仅靠手动输 chcp 65001 是临时的,每次新开终端都要重来。必须让 VSCode 启动终端时自动执行它。
推荐写法(兼容 PowerShell 和 cmd):
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
},
"Command Prompt": {
"path": "cmd.exe",
"args": ["/K", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
- 必须带
-NoExit(PowerShell)或/K(cmd),否则终端启动后立即退出 - 不要写
chcp 65001 && powershell这类链式命令——PowerShell 启动后会丢弃前一条命令的上下文 - 如果已存在
terminal.integrated.profiles.windows字段,直接合并对象,别重复声明导致 JSON 解析失败
PYTHONIOENCODING=utf8 必须加进环境变量,不是可选项
即使 chcp 65001 成功了,Python 解释器启动时仍可能读取系统旧代码页(如 936),把 sys.stdout.encoding 错设为 cp936,导致 print("中文") 输出方块。
验证方式:
python -c "import sys; print(sys.stdout.encoding)"
若输出 cp936,就坐实了这个问题。
- 在
settings.json中加这一行即可修复:"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - 大小写敏感:
UTF-8或UTF8都不行,必须是小写的utf8 - 如果项目用了
launch.json调试,也要在里面加"env": {"PYTHONIOENCODING": "utf8"},Debug Console 不继承终端设置 - 别在 Python 代码里写
sys.stdout.reconfigure(encoding='utf-8'):3.7+ 才支持,且终端底层不真正支持时会抛AttributeError
字体链必须含中文字形,且终端要重启才生效
编码全对了,终端里还是小方块?八成是字体问题。VSCode 的 terminal.integrated.fontFamily 设置只是告诉终端“用哪些字体”,但最终渲染依赖系统是否真能加载并匹配中文字形。
- Windows 推荐填:
"Cascadia Code", "Microsoft YaHei", "Sarasa Gothic SC"(注意英文名,Microsoft YaHei不能写成“微软雅黑”) - macOS 推荐填:
"SFMono-Regular", "PingFang SC", "Helvetica Neue" - 改完必须关闭当前终端 tab,再开新 tab——旧终端不会刷新字体链
- 别用
SimSun(宋体):它不是等宽字体,会导致光标偏移、对齐错乱,尤其在git status或调试输出里明显 - 如果用了 Code Runner 插件,它的执行命令也得加
chcp 65001 &&前缀,否则绕过终端配置
最易被忽略的是:PowerShell 的 $PROFILE 里没配 [Console]::OutputEncoding,或者系统区域设置没开「Beta 版:使用 Unicode UTF-8 提供全球语言支持」——这两项不补,某些老旧工具链(如批处理调用的 exe)仍可能 fallback 到 GBK。











