如果您像我一样:安装的是英文的无版图(Ubuntu),然后添加兼容中文的输入支援。在应用的过程中,您一定会发现,在这样的英文界面上,遇到要输入中文时,总有几个汉字在显示上,有些怪怪的……例如:门、复、径等这些汉字。不是显示为半角,就是显示犹如日本字的笔画写法。如下图:
实际上,这些都不是汉字,这是日文。怎么会这样?怎么解决?
在网络上,有许多人提出这样的问题。可是,回复的答案不外是通过Ubuntu Tweak,或者Unity Tweak Tool修改字体的显示:
可是,这样的修改,虽然界面上如您所愿,在阅读的界面上依照您自己的设定字体字形显示,但是,实际上,并没有彻底解决问题。怎么证明?
当您应用中文输入时,您就会发现这个问题。无论您是采用Ubuntu所提供的拼音输入法,或者自行安装的谷歌输入法,或者许多人应用的搜狗输入法,您会发现,在输入条上的显示,这几个字还是阴魂不散地在那儿显示……
在英文的无版图论坛,没有人问这个问题。在中文的论坛上,有人问了,但是没有人回答……
我对程式语言,一窍不通,当然无法自己去找答案。
后来遇到一位江湖大哥,他说:我不懂中文。这应该是系统字体的应用问题。建议我到下面的几个文件夹里去找找:
/home/[user]/.config/fonts
/etc/fonts/
于是,我像海底捞针一样,把这些文件夹的文件,应用最愚笨的方法:一个个打开来——找、找、找……
终于,皇天不负有心人,终于找到了解决的办法:问题是出在这个文件:64-language-selector-prefer.conf里有关语文预读的先后次序。只要修改了这个先后的次序,就解决了这个问题了。
我的这个64-language-selector-prefer.conf文件,就在/etc/fonts/conf.avail/里。
修改的步骤如下:
1)用管理员的权限,用文本编辑器打开这个在 /etc/fonts/conf.avail/ 目录下的 64-language-selector-prefer.conf 文件。
2)文件的内容是:
[php]
<?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 SC</family>
<family>Noto Sans CJK TC</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Sans Mono CJK JP</family>
<family>Noto Sans Mono CJK SC</family>
<family>Noto Sans Mono CJK TC</family>
</prefer>
</alias>
</fontconfig>
[/php]
如图:
修改的地方,我想不懂程序的朋友都可以胜任愉快。就是把这三行的次序,做些微的调整即可。
Noto Sans CJK JP
Noto Sans CJK SC
Noto Sans CJK TC
这个次序是要系统先读取Noto Sans CJK JP字库。这个是日本字库,难怪系统显示的是日文!终于恍然大悟。这个我还稍微懂一点,因为常常接触到这三个字库:
Noto Sans CJK SC 是思源的中文简体字库;
Noto Sans CJK TC 是思源的中文繁体字库;
Noto Sans CJK JP 是思源的日文字库。
动手把它们的读取次序改一改即可:
次序应该是这样:
Noto Sans CJK SC
Noto Sans CJK TC
Noto Sans CJK JP
修改后的文件内容应该是这样:
[php]
<?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>
[/php]
如图:
3)修改后,记得要保存这个文件。
4)重启系统。大功告成。
如图:
事实上,其他的什么都不必改,只要修改这个文件就可以解决这个问题了。
当然,您如果对字体有偏好,要修改显示的字库,那么,请听尊便。因为,跟这个我提的问题一点关系也没有。
用了一年多的无版图(Ubuntu),越来越觉得这个系统——太好了。
2022年4月1日补充:
题外话:
统一码(Unicode)的输入:
如:?
输入方法:Fcitx5中文拼音输入:
Ctrl + Alt + shift + U 继续输入 U+23d11
这时显示?:
选择这个预选字: 按 Enter 或者用鼠标点按。(Linux里平台众多,不同平台有不同的选取方式。例如我在Debian 11 Bullseye平台,是用鼠标点按选取。请自行试试。)
至于noto cjk字库,也无法包含一些学术上的用字。这个字库只有三万多个汉字,我之前曾经做过一些统计与研究,如果要应用自如,应该有六七万汉字才够用。
所以在显示上,这些不常用字(包括异体字、不常用的繁体字等),只能显示为宋体。其他的如楷体、黑体、仿宋体等等,需要的话,只能自己通过造字软件(如免费的Fontforge等)根据unicode的排位自己造字了。
1条评论
薛元
我按您的方法确实解决了问题。十分感谢。
但我还有个问题向您请教。我Ubuntu上字体显示不全。比如:
https://www.zdic.net/hans/%F0%A3%B4%91
这个字显示不了。
按说noto cjk是收字齐全的。否则也对不起no tofu的名字啊。
请您指导。
李前南
请见文末2022年4月1日的补充说明。不明白请再问,我们再切磋和讨论。谢谢。
薛元
谢谢您的回答。我之前不知到有一个hanazono字库。按如下命令安装后显示完整了:
sudo apt-get install fonts-hanazono
过去几个月我同时练习了用仓颉打字法。一般难字都可以打了。差不多完全满足我抄古书的需要。
?。