Ubuntu 上中文字体显示不正确

注意
本文最后更新于 2021-12-26,文中内容可能已过时。

tsy: “复: 你礼貌吗?”

简单来说, 就是会有一些字如"复", “门”, “直"等看起来不像正常写的字, 这种东西叫"异体字”. 貌似默认 Sublime 里也会碰到这样的情况, 无论是什么操作系统.

Sublime 好解决, 换个字体就完事了. 但是 Ubuntu 系统设置(当然是可视化)里, 并没有提供中文的设置, 然后就人傻了.

一番查询之后, 发现了原因. 系统里设置的字体只有英文的(Ubuntu字体真好看!), 这些字体里并没有中文. 当需要显示中文时, 会通过 fontconfig 这个软件中(已经预装了)设置好的回落, 显示其他字体. 问题就出在这里!

打开 /etc/fonts/conf.d/64-language-selector-prefer.conf (顾名思义, 字体选择偏好), 会发现他大概长这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans CJK JP</family>
      <family>Noto Sans CJK KR</family>
      <family>Noto Sans CJK SC</family>
      <family>Noto Sans CJK TC</family>
      <family>Noto Sans CJK HK</family>
      <family>Lohit Devanagari</family>
    </prefer>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif CJK JP</family>
      <family>Noto Serif CJK KR</family>
      <family>Noto Serif CJK SC</family>
      <family>Noto Serif CJK TC</family>
      <family>Lohit Devanagari</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono CJK JP</family>
      <family>Noto Sans Mono CJK KR</family>
      <family>Noto Sans Mono CJK SC</family>
      <family>Noto Sans Mono CJK TC</family>
      <family>Noto Sans Mono CJK HK</family>
    </prefer>
  </alias>
</fontconfig>

可以发现, 每一种字体下的偏好, SC (简体中文)不是第一位, 这些丑不拉几的异体字不是中文而是优先选择的其他文字… 所以只需要把 SC 丢到第一位就行了. 记得重启.

当然也可用其他其他字体, 思源黑体已经很好看啦, 我就不改了.