Debian 9下解决Noto CJK Sans默认为日文JP导致部分字符显示不正常

感谢Arch Wiki。

安装Noto Sans CJK后,在某些情况下(框架未定义地区)汉字字形与标准形态不符,例如门、关、复等字字形与规范中文不符。

这是因为每个程序中可以设置不同的默认字体,比如Arial或者Tohamo,而这些字体的属性由fontconfig控制,其使用顺序是据地区代码以A-Z字母表顺序成默认排序,由于 ja-JP 在 zh_{CN,HK,SG,TW} 之前,故优先显示日文字形。

可选用以下方法解决:
1.安装根据地区打包的字体,例如简体中文用户安装思源黑体简体中文包adobe-source-han-sans-cn-fonts、adobe-source-han-serif-cn-fonts或者noto-fonts-sc。(此方法最简单但Debian没有独立的包)

2.手动调整优先级,将中文字形调整到日文字形之前。

修改或创建文件/etc/fonts/conf.avail/64-language-selector-prefer.conf,

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans CJK SC</family>
      <family>Noto Sans CJK TC</family>
      <family>Noto Sans CJK JP</family>
    </prefer>
  </alias>
  <!--以上为设置无衬线字体优先度-->
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono CJK SC</family>
      <family>Noto Sans Mono CJK TC</family>
      <family>Noto Sans Mono CJK JP</family>
    </prefer>
  </alias>
  <!--以上为设置等宽字体优先度-->
</fontconfig>

若/etc/fonts目录下有conf.d/目录(Debian有),则在该目录中创建指向/etc/fonts/conf.avail/64-language-selector-prefer.con的同名软链接:

# ln -s /etc/fonts/conf.avail/64-language-selector-prefer.conf /etc/fonts/conf.d/64-language-selector-prefer.conf

然后更新字体缓存即可生效:

# fc-cache -fv

执行以下命令检查,如果出现NotoSansCJK-Regular.ttc: "Noto Sans CJK SC" "Regular"则表示设置成功:

# fc-match -s |grep 'Noto Sans CJK'

此处评论已关闭