英文无版图(Ubuntu)系统环境的汉字显示兼容的解决方法

如果您像我一样:安装的是英文的无版图(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的名字啊。
    请您指导。

    • A
      李前南

      请见文末2022年4月1日的补充说明。不明白请再问,我们再切磋和讨论。谢谢。

      • 薛元

        谢谢您的回答。我之前不知到有一个hanazono字库。按如下命令安装后显示完整了:
        sudo apt-get install fonts-hanazono
        过去几个月我同时练习了用仓颉打字法。一般难字都可以打了。差不多完全满足我抄古书的需要。
        ?。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据