VS Code 终端中文乱码主因是 Windows 默认代码页(如936)与 UTF-8 输出不匹配;应设 terminal.integrated.defaultProfile.windows 为 PowerShell,添加 PYTHONIOENCODING=utf-8 环境变量,并新建终端生效。

终端输出中文显示为问号或方块
VS Code 内置终端(Terminal)默认编码不是 UTF-8,尤其在 Windows 上用 PowerShell 或 CMD 时,chcp 常是 936(GBK),而 Python/Node.js 等脚本默认按 UTF-8 输出,一来一回就乱码。
- 先运行
chcp看当前代码页:Windows 下若输出活动代码页: 936,基本就是根源 - 临时修复:在终端里手动执行
chcp 65001(切换到 UTF-8),但重启终端就失效 - 永久方案:进 VS Code 设置,搜
terminal.integrated.defaultProfile.windows,把它设为PowerShell(而非 CMD),再在设置里加:terminal.integrated.env.windows→ 添加{"PYTHONIOENCODING": "utf-8"} - 注意:某些旧版 PowerShell 启动慢或不读系统 locale,可改用 Windows Terminal 作为外部终端(设置
terminal.integrated.terminalFontFamily不解决根本问题)
Python print() 在 VS Code 终端里显示字符
不是终端问题,是 Python 运行时没告诉自己“输出要走 UTF-8”,尤其在 Windows + CMD 组合下高频出现。
- 检查
sys.stdout.encoding:写一行import sys; print(sys.stdout.encoding),如果不是utf-8,说明环境没对齐 - 不推荐改
site.py或全局环境变量——太重。更直接的是启动时加参数:python -X utf8 script.py(Python 3.7+ 支持) - 或者在代码开头强制指定(仅限调试):
import io, sys; sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') - 如果用了
subprocess调外部命令,记得传encoding='utf-8',否则stdout字节流解码仍可能崩
调试器(Debug)控制台输出乱码
这是独立于终端的另一套输出通道,底层用的是 VS Code 的 Debug Adapter Protocol,编码策略和终端不共享。
- Python 扩展的 debug 控制台默认跟随系统 locale,Windows 中文版常 fallback 到 GBK
- 打开
launch.json,在配置里加:"env": {"PYTHONIOENCODING": "utf-8"}—— 这个对调试器生效,比改系统变量安全 - 如果用的是
ptvsd(老版本)或自定义 adapter,确认它启动参数含--log-to-stderr --log-level DEBUG,乱码常伴随编码警告日志 - 注意:调试器里
print()和logging行为一致,但pprint或变量悬停显示不受此影响
文件读写正常,但终端 print() 还是乱码
说明文件 I/O 编码没问题(比如你用 open(..., encoding='utf-8')),问题纯粹卡在“输出管道”上——即 stdout 的编码协商失败。
- 别信
locale.getpreferredencoding()返回值:它在 Windows 上常返回cp936,但 Python 可能已用UTF-8初始化了 stream - 验证方法:在终端跑
python -c "import sys; print(sys.stdout.isatty(), sys.stdout.encoding)",如果isatty是False(比如被重定向),那编码逻辑会跳变 - 终极兜底:所有关键输出前加
print(text.encode('utf-8').decode('utf-8', errors='replace'))—— 别真这么干,只是帮你定位是不是 decode 阶段出错 - 真正该盯住的是 VS Code 的
terminal.integrated.profiles.windows里每个 shell 的args是否带-NoExit -Command "chcp 65001"
最常被忽略的点:改完设置后没关掉已有终端实例。VS Code 的终端进程不继承新设置,必须新建一个 Terminal 标签页才生效。










