VSCode中文显示方框或乱码主因是字体回退链断裂或文件编码错位:先右下角点编码名试GBK恢复显示,再按需配置editor.fontFamily、terminal.integrated.fontFamily及PYTHONIOENCODING,禁用autoGuessEncoding,四者需同步对齐。

VSCode 中文显示方框或乱码,90% 不是文件损坏,而是字体链断裂或编码解码错位——先点右下角编码名试 GBK 恢复显示,再确认是否要配 editor.fontFamily 或 terminal.integrated.fontFamily,别一上来就改全局配置。
右下角点“UTF-8”后选 Reopen with Encoding 为什么总要试 GBK?
Windows 上用记事本保存的中文文本,默认是 GBK 编码,但 VSCode 默认按 utf8 解码,结果就是满屏 □ 或 。这不是 bug,是行为一致:VSCode 严格按字节流 + BOM/启发式判断解码,而记事本不写 BOM、也不声明编码。
- 点击右下角当前显示的编码(如
UTF-8),选Reopen with Encoding→ 优先试GBK(比GB2312兼容性更好) - 若文字立刻变正常,说明原始编码就是
GBK;若更乱,关掉重开,再试UTF-8 with BOM或ISO 8859-1 -
Reopen with Encoding是只读操作,不改文件内容,安全可逆 - 别信
files.autoGuessEncoding:它对无 BOM 的GBK文件基本猜错,常判成windows1252,建议直接设为false
editor.fontFamily 设成 "Fira Code" 就崩出方块?
VSCode 不支持跨语言族自动 fallback。你只写 "Fira Code",它就不会去找系统里的 Microsoft YaHei 或 PingFang SC 渲染中文,结果注释、字符串、甚至菜单里汉字全变成方块。
- 必须显式列出中文字体作为 fallback:
"Fira Code, Microsoft YaHei, sans-serif"(Windows)、"SF Mono, PingFang SC, monospace"(macOS) - Linux(尤其 Alpine/Docker 镜像)默认无中文字体,需手动安装
fonts-wqy-zenhei或noto-cjk,再重启 VSCode - 编辑器内正常但终端还是方块?那是另一套配置:
terminal.integrated.fontFamily必须单独设,且推荐用等宽中文字体如Cascadia Code或MesloLGS NF - 设完记得新开一个终端——旧终端不会刷新字体链
终端 print("中文") 是问号或方块,跟文件编码没关系
这是 stdout 编码和终端解码没对齐。Python 按 UTF-8 输出,CMD 却用 CP936(即 GBK)去解,中间没协商,必然乱码。编辑器里文件能看 ≠ 终端能输出。
- Windows 下最稳方案:在
settings.json加这一行:"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - 别碰已弃用的
terminal.integrated.encoding,设了也无效 - 临时验证:终端里先运行
chcp 65001,再跑 Python 脚本,如果立刻正常,就坐实是这个原因 - Debug Console 乱码?要在
.vscode/launch.json的env字段里加{"PYTHONIOENCODING": "utf8"},大小写敏感
Save with Encoding → UTF-8 后还是乱码?
说明原文件可能混用了编码,比如前几行是 GBK,后面又插了一段 UTF-8 写入的内容。VSCode 强制 Save as UTF-8 会把整块字节当 UTF-8 重编码,导致部分字符崩坏。
这时候不要覆盖原文件。复制全部内容 → 新建空白文件 → 粘贴 → 再点右下角选 Save with Encoding → UTF-8。这样绕过原始文件的编码污染,才是干净转码。
真正容易被忽略的是:编辑器字体、终端字体、Python 运行时环境变量、文件实际编码——这四者必须各自对齐,缺一不可。少调一个,就可能卡在「看着像好了,但某处突然冒个方块」的状态里。


















