vscode终端中文显示方块或问号,主因是python进程stdout编码与终端解码不一致;需设"terminal.integrated.env.windows": {"pythonioencoding": "utf8"},禁用已弃用的terminal.integrated.encoding,debug console需在launch.json中加env配置,并显式设置中英双语等宽字体链。

VSCode终端里print("中文")显示方块或问号,90%不是文件编码错了,而是Python进程的stdout编码和终端解码没对齐——改files.encoding完全无效。
terminal.integrated.env.windows 必须设为 utf8(大小写敏感)
Windows下Python默认不信任终端是UTF-8,即使你执行过chcp 65001,它仍可能fallback到cp1252或mbcs。唯一稳定方案是透传环境变量:
-
"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}—— 注意是小写utf8,不是UTF-8,Windows下大写会失效 - 不要碰
terminal.integrated.encoding,该配置已被弃用,设了也不起作用 - 如果用Code Runner插件,还需单独改它的执行命令:把
c对应值从"cd $dir && gcc "改成"chcp 65001 && cd $dir && gcc "
Debug Console 和 Output 面板乱码要单独处理
这两个面板不走终端链路,也不读terminal.*配置,它们依赖Node.js层的编码感知。Windows上Node默认不启用UTF-8模式,必须手动注入:
- 在项目根目录的
.vscode/launch.json中,给当前调试配置加"env"字段:{"PYTHONIOENCODING": "utf8"} - 确认没有在代码里写
sys.stdout = io.TextIOWrapper(...),这种硬编码会覆盖环境变量 - 老版本ptvsd或自定义debug adapter需检查启动参数是否含
--log-to-stderr,乱码常伴随编码警告日志一起出现
字体链必须显式指定中英双语等宽字体
编码全对但仍是方块?说明渲染层卡住了。VSCode不会自动 fallback 到系统中文字体,必须手动配字体链:
- 设置
"terminal.integrated.fontFamily": "Fira Code, Sarasa Gothic SC, JetBrains Mono"—— Windows用英文名Sarasa Gothic SC,别写“更纱黑体” - macOS推荐
"SFMono-Regular, PingFang SC";Linux建议"DejaVu Sans Mono, Noto Sans CJK SC" - 改完必须关闭现有终端tab,新开一个才生效;用
echo "测试"验证,不是靠print() - 别用
SimSun(宋体),它不是等宽字体,会导致光标错位、对齐崩坏
最易被忽略的是:终端字体配置和环境变量必须同时生效,缺一不可;而且Debug Console和集成终端是两套独立通道,不能指望一个配置打遍天下。











