日文系统,或者系统安装日文输入法或者日文系统后, 发现中文的展示逐渐变得很奇怪. VSCode 最近常用于中文博客的编辑. 越来越有点无法忍受.

原因分析: font-family 的作用原理, 是关键.

  • 中文显示差异, 我已经有了一些基础的认识.

  • 在阅读了一些web中文字体的讨论文章后, 我对 font-family 或者说系统寻找字体的方式, 有了进一步的认知.

    • 我以为的判定使用 font-family 的方式: 从前往后遍历font-family的字体名, 哪种字体已经安装到系统中,就应用哪种字体.
    • 更符合观察的的 font-family 的作用原理: 对于指定汉字或者字符, 从前往后遍历 font-family 配置的字体的字体文件. 有对应表示就使用该字体下的表示;没有对应字体,就继续找.
    • 这也引出了经典问题 “中文字体” 和 “西文字体”, 谁在前,谁在后. 当然, 问题的答案, 取决于你预期的效果是什么.
      • 像我这样, 就是像中文和英文, 都优先展示 “新宋体”, 那直接配置单独的 “中文字体” 就行了.
      • 如果想做到优先展示某个西文字库的字体样式, 遇到中文时,才展示对应中文字体的样式. 此时很明显, 西文字体应该在前.
  • 更进一步: 进行 font-family 判定的最小单位是: 单个字符/汉字. 如果字体本身不支持特定字符, 依然会继续往下遍历font-family的下一个值, 而不是立即由系统 “随机” fallback.

如何解决? - 更改 VSCode 字体默认配置.

vscode_change_font

知道问题所在, 就非常简单了. 只要在 VSCode 编辑器默认字体配置的最后, 加一个自己的中文字体就行了. 当然, 甚至可以直接只用 中文字体作为 默认字体. 考虑到 VSCode 主要还是以编程为主, 还是尊重 VSCode 的默认西文配置, 只在末尾追加字体配置.

  • Windows 平台, VSCode 编辑器字体配置的路径是: File -> Preferences -> Settings -> Text Editor -> Font Family

  • 默认值是:

Consolas, 'Courier New', monospace
  • 我修改后的值是:
Consolas, 'Courier New', monospace, NSimSun

效果展示: 看着舒服多了.

  • 修改前. 奇怪的中文展示.各种莫名其妙的黑体或者加粗效果:

before_font_chage

  • 修改后. 看着舒服多了. 整体看上去, 更协调.当有大量中文文字时,对比会更强烈:

after_font_chage

小感: 重要的小事? 复杂的大事?

我有一段不写博客, 就是因为认为自己没接触过太复杂的问题. 但是目前我的观念略微有一些变化.

许多, 看似复杂的事, 可能只是受限于自己既有的知识经验积累. 比如这次 VSCode 中文字体显示问题.我本来是打算凑合凑合得了, 毕竟中文博客, 并不是主要任务.但是当对 font_family 的作用方式,有了进一步的了解后, 我突然意识到这个问题, 其实非常容易解决.

但是 VSCode 编辑器内 “中文显示” 这个 “小事”, 对待相当一部分群体, 就是一个很重要的大事. 想象下, 数以百万计的同时安装 日文和中文 字体的人. 他们大概率都会在不同软件上, 或多或少遇到类似的问题.

而所谓的 “复杂的大事”, 可能并不存在. 因为无法被有效分割消化的 “大事”, 必然是自己暂时无法可靠解决的. 而一旦一件 “复杂的大事” 能被可靠地处理, 说明自己已经积累了足够多的经验和智慧.对于那事的自己, 那件 “复杂的大事”, 可能就又变成了 “小事”.

所以, 这可能也就进一步确定我的博客未来的方向: 记录我在日常工作和生活中, 解决的各种 “重要的小事”. 所以说, 所谓 “记录自己的成长”, 不应该停留在 身高,长相等表面上, 更应该记录下自己积累的各种奇怪的经验. 后者才更应该称之为 “成长”; 而时间所催发的, 无非是看似平淡的另一个明天.

参考