VSCode中文注释显示方块主因是字体回退链缺失或Unicode高亮干扰:注释被TextMate引擎单独处理,不继承主字体链,若editor.fontFamily未显式包含真实存在的中文字体(如"Microsoft YaHei")且位置靠前,或editor.unicodeHighlight.allowedLocales未设为zh-hans,则直接渲染为方块。

VSCode中文注释显示为方块,90%不是编码问题,而是字体链没兜住中文字符——编辑器尝试用纯西文字体(如 Fira Code、JetBrains Mono)渲染汉字,结果 fallback 失败,直接画方块。
为什么注释比字符串更早变方块?
注释文本常被语法高亮引擎(TextMate)单独切片处理,它不继承文件主体的字体上下文,也不走编辑器主字体链的 fallback 逻辑。一旦 editor.fontFamily 里没显式包含中文字体,注释段就直接卡在第一个无中文支持的字体上,比如 Consolas 或 Monaco,立刻出 □。
- 字符串字面量(如
"用户名")可能因语言服务或 token 高亮路径不同,意外触发了系统级字体回退 - 注释是“静态文本”,高亮器只做正则匹配,不做编码/字体协商,对字体链依赖最刚性
- 即使你装了微软雅黑,若没写进
editor.fontFamily字体列表,它根本不会被查到
怎么配 editor.fontFamily 才真正生效?
不能只填一个字体名,必须提供带 fallback 的逗号分隔链,且中文字体要靠前、等宽、真实存在。
- Windows 推荐值:
"Microsoft YaHei", "Fira Code", "Consolas", "monospace" - macOS 推荐值:
"PingFang SC", "Fira Code", "Menlo", "monospace" - Linux(如 Ubuntu)推荐值:
"Noto Sans CJK SC", "Fira Code", "DejaVu Sans Mono", "monospace" - 改完后必须重启 VSCode(仅重载窗口不够),否则旧字体缓存仍生效
- 别用引号嵌套引号:错误写法
"'Fira Code', 'Microsoft YaHei'"→ 正确是"Fira Code", "Microsoft YaHei"
editor.unicodeHighlight 也会干扰注释显示
VSCode 1.64+ 默认开启 Unicode 高亮,会把非 ASCII 字符(包括汉字)当作“可疑字符”加框渲染,尤其在注释里更明显。
- 鼠标悬停方块上,常看到提示 “This character is not basic ASCII”,说明是它干的
- 关掉它:
editor.unicodeHighlight.invisibleCharacters设为false - 更精准的做法是设
editor.unicodeHighlight.allowedLocales为zh-hans,允许简体中文不被高亮 - 这个设置和字体无关,但和注释方块现象高度共现,排查时别漏掉
终端中文正常,但编辑器注释还是方块?重点查这三处
说明系统字体和终端配置没问题,问题纯在编辑器层渲染路径。
- 打开「帮助 > 切换开发人员工具」,执行
getComputedStyle(document.body).fontFamily,看返回值是否含你配的中文字体名 - 检查
settings.json里有没有工作区级覆盖(.vscode/settings.json),它会压过用户设置 - 禁用所有插件后重启,确认不是某个语法高亮插件(如某些 Python 插件自定义 token 渲染)劫持了注释样式
最容易被忽略的是:字体名大小写和空格必须和系统注册表/字体册里完全一致;Windows 上 Microsoft YaHei 不能写成 Microsoft Yahei 或 yahei,macOS 上 PingFang SC 少个空格就失效。


















