VSCode控制台中文乱码需同步解决终端代码页、程序编码环境和字体三方面问题:Windows需在settings.json中配置terminal.integrated.profiles.windows注入chcp 65001,并设置PYTHONIOENCODING=utf-8;Linux/macOS需确保LANG为zh_CN.UTF-8且fontFamily支持中文。

VSCode 控制台中文乱码不是单一配置能一劳永逸解决的,必须区分「终端自身显示」和「程序运行输出」两层问题。只改 files.encoding 或只装中文语言包,对控制台乱码完全无效。
终端启动时代码页没切到 UTF-8(Windows 最常见)
VSCode 集成终端(PowerShell / CMD)默认用系统旧代码页(如 936/GBK),而你的 Python/C 程序按 UTF-8 输出字节,终端用 GBK 去解,必然乱码。这不是字体或语言包的问题,是底层字符集不匹配。
- 在
settings.json中强制为终端注入chcp 65001(即切换到 UTF-8 代码页):
{
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "/c", "chcp 65001"]
},
"Command Prompt": {
"path": "cmd.exe",
"args": ["/K", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
- 不要依赖“终端里手动敲
chcp 65001”——每次新开终端都要重输,且无法保证任务(tasks)和调试(launch)继承该设置 - 如果用的是 Windows Terminal + VSCode,还需确认 Windows Terminal 自身的配置里也设了
"profile": { "font": { "face": "Consolas" } }并启用 UTF-8
Python 程序输出被终端截断或二次编码(PYTHONIOENCODING 必须设)
即使终端代码页正确,Python 解释器仍可能因环境变量缺失,把 sys.stdout 当作系统默认编码(GBK)处理,导致它内部就把 UTF-8 字节转成了错误的字节流再交给终端——这时终端再怎么设 UTF-8 也救不回来。
- 在
settings.json或tasks.json的options.env中显式声明:
"options": {
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
- 不推荐在 Python 源码里写
sys.stdout=io.TextIOWrapper(...)——污染业务逻辑,且对print()以外的输出(如日志、异常 traceback)无效 - 也不建议全局设系统环境变量
PYTHONIOENCODING——会影响所有 Python 进程,包括非 VSCode 场景,容易引发意外副作用
Linux/macOS 终端乱码:别漏掉 LANG 和字体
VSCode 在 Linux/macOS 上默认复用系统 shell,但有时会忽略当前用户的 locale 设置,尤其用 code . 从命令行启动时。
- 检查终端内是否真生效:
echo $LANG应输出类似zh_CN.UTF-8;若为空或C,说明 VSCode 启动时未加载用户 shell 配置 - 在
settings.json中补上:
"terminal.integrated.env.linux": {
"LANG": "zh_CN.UTF-8",
"LC_ALL": "zh_CN.UTF-8"
}
-
terminal.integrated.fontFamily必须设为支持中文的字体,例如"Sarasa Mono SC"、"Noto Sans CJK SC"或系统自带的"WenQuanYi Micro Hei";仅设"Consolas"或"Fira Code"会导致中文显示为空格或方框
真正麻烦的点不在配置本身,而在于「终端代码页」、「程序运行时编码环境」、「字体渲染」三者必须同时对齐。少一个环节,乱码就会以不同形态复现——比如终端能正常显示 ls 中文文件名,但 python -c "print('你好')" 仍是乱码,那就是 PYTHONIOENCODING 没生效;反过来,Python 能输出中文但 gcc --version 显示乱码,则是终端 profile 没配好。排查时务必分层验证,别指望一个开关打遍天下。


















