VSCode终端Python输出乱码主因是Windows终端编码(GBK)与VSCode UTF-8解析不一致,需设"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}并重启,PowerShell 7+更佳。

VSCode终端里 print("你好") 显示 □、? 或 “й你好” 这类乱码,90% 不是文件编码错了,而是终端解码和 Python 输出编码没对齐——改 files.encoding 或换字体根本不管用,必须让 stdout 字节流和终端渲染走同一条编码路径。
确认是不是 chcp 936 导致的错位
在 VSCode 集成终端里直接运行:chcp。如果输出是“活动代码页: 936”,就坐实了问题根源:Windows 控制台默认用 GBK 解码,而 Python(尤其 3.8+)默认按系统代码页设 sys.stdout.encoding 为 cp936,但 VSCode 终端内部按 UTF-8 解析字节流,中间断层了。
临时验证:输入 chcp 65001 回车,再跑一遍脚本,立刻正常 → 就是它。
- 别信“改了
terminal.integrated.defaultEncoding就行”——这个配置项在新版 VSCode 中已被弃用,设了也无效 - 别手动在终端里每次输
chcp 65001,新开终端又要重来,不治本 - PowerShell 5.1 和旧版 CMD 是重灾区;PowerShell 7+(
pwsh)原生支持 UTF-8,优先切过去
Python 输出乱码:必须设 PYTHONIOENCODING=utf8
这是 Windows 下最稳的解法。Python 启动时会读取这个环境变量,强制把 sys.stdout 和 sys.stderr 的 encoding 设为 UTF-8,绕过系统代码页探测逻辑。
操作方式:打开 settings.json(Ctrl + Shift + P → Preferences: Open Settings (JSON)),加入或合并到已有对象中:
"terminal.integrated.env.windows": {
"PYTHONIOENCODING": "utf8"
}
- 大小写敏感:必须是小写
utf8,不是UTF-8或utf-8,Windows 下后者不生效 - 不要写进脚本里调
sys.stdout.reconfigure():3.7+ 才支持,且终端不真正支持时会抛AttributeError - 如果你用 Code Runner 插件,还得单独改它的执行命令,比如在
settings.json里加:"code-runner.executorMap": {"python": "chcp 65001 && python -u"}
Debug Console / Output 面板还是问号?那是另一套链路
Debug Console 和 Output 面板不走终端进程,也不读 terminal.* 配置,它们依赖 VSCode 主进程与调试器之间的通信协议,底层靠 Node.js 解析字节流。Windows 上 Node 默认不启用 UTF-8 模式,所以即使终端好了,这里还可能糊。
解决方法:在项目根目录下建 .vscode/launch.json,给当前 launch 配置加 env 字段:
"configurations": [{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"module": "mymodule",
"env": {
"PYTHONIOENCODING": "utf8"
}
}]
- 别只写
"env": {"PYTHONIOENCODING": "utf8"}而漏掉外层configurations结构,JSON 格式错一个逗号就整个失效 - 如果用了老版本 ptvsd 或自定义 debug adapter,检查启动参数是否含
--log-to-stderr,乱码常伴随编码警告日志一起出现 - 重启 VSCode 才能确保新配置加载进 Debug Console 进程
字体显示方块?那才是真·字体问题
如果 chcp 65001 和 PYTHONIOENCODING 都设对了,终端里输出的是正确 Unicode 字符(比如你能复制出“你好”),但显示为小方块,说明字体链没兜住中文。
设置方式:在 VSCode 设置里搜 terminal.integrated.fontFamily,填入带中文字体的等宽链,例如:
"Cascadia Code", "Microsoft YaHei", monospace
- Windows 用户必须额外右键终端 → 属性 → 字体 → 手动选
Cascadia Code或Consolas;仅靠 VSCode 设置不生效 - 别用
SimSun(宋体)当主力终端字体:它不是等宽字体,会导致光标偏移、对齐错乱,甚至影响git status等命令输出格式 - 改完必须关掉当前终端,再按
Ctrl + Shift + `新开一个——旧终端不会刷新字体
真正卡住的地方往往不在第一眼看到的环节:你可能已经设对了 PYTHONIOENCODING,但忘了 launch.json 里没同步;也可能字体链写了 Microsoft YaHei,却没在终端属性里手动指定;或者在 PowerShell 5.1 里只设了环境变量,却没配 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 到 $PROFILE。每个子系统都有自己的编码感知逻辑,不能指望一个配置打遍天下。


















