vscode终端print中文乱码主因是stdout编码与终端解码不匹配,非文件编码问题;应设"terminal.integrated.env.windows": {"pythonioencoding": "utf8"},并配置支持中文的等宽字体链,改后需重启终端。

VSCode 运行代码时中文乱码,90% 不是文件编码错了,而是输出管道(stdout)和终端渲染没对齐——编辑器里文件能正常显示,但 print("你好") 在终端里变成 □□ 或 ?,这跟 files.encoding 几乎无关。
终端执行 Python 时 print() 输出乱码
这是 Windows 下最典型的“编码错位”:Python 解释器按 UTF-8 输出,而 CMD/PowerShell 默认用 CP936(GBK)解码,中间没协商好。
- 临时验证:在 VSCode 终端里先运行
chcp 65001,再运行 Python 脚本,如果立刻正常,就坐实了这个问题 - 永久修复(推荐):在
settings.json中加这一行:"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - 别碰
terminal.integrated.encoding—— 它已被弃用,设了也无效 - 如果你用 Code Runner 插件,得改它的执行命令:把
c对应的值从"cd $dir && gcc ..."改成"chcp 65001 && cd $dir && gcc ..."
调试器(Debug Console)里中文还是问号
Debug Console 的编码不继承终端设置,它走的是另一套环境变量逻辑,尤其在 Windows 上容易 fallback 到系统 locale。
- 在项目根目录的
.vscode/launch.json里,给当前配置加"env"字段:{"PYTHONIOENCODING": "utf8"} - 不要只写
"env": {"PYTHONIOENCODING": "UTF-8"}—— 大小写敏感,Windows 下必须小写utf8才生效 - 如果用了老版本 ptvsd 或自定义 debug adapter,还得确认启动参数含
--log-to-stderr,乱码常伴随编码警告日志一起出现
终端字体显示方块,不是编码问题
即使 chcp 65001 和 PYTHONIOENCODING 都设对了,终端里仍是一堆小方块?那八成是字体链没兜住中文。
- 在 VSCode 设置里搜
terminal.integrated.fontFamily,填入带中文字体的等宽链,例如:"Cascadia Code", "Microsoft YaHei", monospace - Windows 用户必须额外进终端右键 → 属性 → 字体,手动选 Consolas 或 Cascadia Code(仅靠 VSCode 设置不够)
- 改完后必须关掉当前终端,再按
Ctrl + Shift + `新开一个——旧终端不会刷新字体 - 别用
SimSun(宋体)当主力终端字体,它不是等宽字体,会导致对齐错乱、光标偏移
文件本身没问题,但终端输出还是糊的
你确认过 open("xxx.txt", encoding="utf-8") 能读、print() 在其他 IDE 里正常,唯独 VSCode 终端糊?说明问题卡在“Python 启动时 stdout 的 encoding 初始化”上。
- 检查是否在代码开头写了
sys.stdout = io.TextIOWrapper(...)—— 这种硬编码会覆盖环境变量,反而导致冲突 - 禁用所有非必要插件(尤其是 Terminal 相关的),用干净工作区测试,Code Runner 和 Python 插件的 executorMap 常偷偷覆盖环境
- 如果用了 WSL,别调 Windows 终端设置,直接进子系统跑
locale -a | grep zh_CN,确保有zh_CN.UTF-8,没有就sudo locale-gen zh_CN.UTF-8
真正难搞的从来不是“怎么设”,而是多个层级(shell → Python runtime → VSCode terminal → 字体渲染)各自维护一套编码策略,且默认不互通。一个地方漏配,中文就断在半路。











