VSCode终端print中文乱码主因是终端与Python进程编码未对齐,需设"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}并重启终端,同时配置PowerShell profile、字体链等五项协同生效。

VSCode 运行 Python 脚本时 print("中文") 输出方块、问号或空格,90% 不是文件编码错了,而是终端进程没用 UTF-8 解码 stdout 字节流——改 files.encoding 或右下角点“UTF-8”重开文件,对控制台输出完全无效。
怎么确认是终端编码错配,不是文件问题
先区分现象:
- 编辑器里中文显示正常,但终端
print()输出乱码 → 终端层问题 - 编辑器里一打开就是 □ 或 \u4f60\u597d → 文件编码读取错位
- 终端里
echo 你好正常,但python -c "print('你好')"乱码 → Python 进程未对齐终端编码
验证关键命令:
chcp
若输出 活动代码页: 936,说明 PowerShell/CMD 当前用 GBK;再运行:
立即学习“Python免费学习笔记(深入)”;
python -c "import sys; print(sys.stdout.encoding)"
若输出 cp936(不是 utf-8),就坐实了错配。
settings.json 必加的两行环境变量
这是最稳、最轻量的修复方式,不依赖 shell 启动脚本,也不碰已弃用的 terminal.integrated.encoding:
-
"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}—— 强制 Python 所有 I/O 走 UTF-8,大小写敏感,必须小写utf8,UTF-8或utf-8都无效 - 如果同时用 Code Runner 插件,还得改它的执行命令:把
"c": "cd $dir && gcc "换成"c": "chcp 65001 && cd $dir && gcc ",否则插件绕过你的环境变量
改完后必须关闭所有已打开的终端(Ctrl + Shift + ` 关掉全部),再新建一个才生效。
PowerShell 用户额外要做的两件事
VSCode 启动的 PowerShell 进程默认不加载用户配置,光靠 PYTHONIOENCODING 有时不够:
- 在 VSCode
settings.json中补全 profile 配置,确保每次新开终端都自动切 UTF-8:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
}
}- 在 PowerShell 的
$PROFILE文件里加一行:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8—— 这影响 .NET 控制台 API 输出,比如某些 C# 工具调用时的中文
注意:-NoExit 必须带上,否则终端启动即闪退。
字体链没兜住中文,也会显示方块
即使 chcp 65001 和 PYTHONIOENCODING 全对,终端仍是一堆小方块?那八成是字体不支持中文或非等宽:
- 在 VSCode 设置中搜
terminal.integrated.fontFamily,填入带中文字体的等宽链,例如:"Cascadia Code", "Microsoft YaHei", monospace - Windows 用户必须额外进终端窗口右键 → 属性 → 字体 → 手动选
Consolas或Cascadia Code(仅靠 VSCode 设置不生效) - 别用
SimSun(宋体):它不是等宽字体,会导致缩进错乱、光标偏移、Git 日志对不齐
改完字体后,旧终端不会刷新,必须关掉再按 Ctrl + Shift + ` 新开一个。
真正容易被忽略的是:文件编码、终端代码页、Python 进程环境变量、PowerShell 输出编码、终端字体——这五者必须全部对齐,缺一不可。少设一项,就可能在某个环节断掉,比如调试器里正常,终端里糊;或者终端里正常,Code Runner 里又糊。


















