前文《使Windows系统正常显示Unicode规范CJK全部扩展区字符的技巧》提到在Windows系统中如何显示中日韩统一表意文字(CJK Unified Ideographs)基本区与扩展A-G区所有字符的手段,本文以Android系统来讲讲如何实现。
先看两幅对比图(我手机是红米6A,ROM是安卓8.1,MIUI10)。
㈠未采用本文所讲方法对扩展区字符实施支持的情况
㈡已采用本文所讲方法对扩展区字符实施支持的情况
本文仅提供解决方法,原理方面就不描述了。
从上面图片可以看出,手机系统默认字体组合(ROM自己的主字体+Android中文保底字体思源黑体Noto Sans CJK)只能显示CJK基本区和扩展A区全部字符,但对其余各扩展区内的字符支持率很低,且支持的零星字符在编码上分布很散。不但我的红米手机,其它品牌手机也一样,在几十部国产手机上试过效果了。解决方法就是增加字体文件,并嵌入到系统字体架构的回溯序列当中。
首先准备字体文件。和前一篇文章《使Windows系统正常显示Unicode规范CJK全部扩展区字符的技巧》一样,用“KaiXinSong(开心宋体)”和“sim-ch_n5100”就行。“sim-ch_n5100”必须按前文所讲手动处理一下,否则在Android中使用该原版字体会导致调用系统WebView的应用全部崩溃!原因未明!
接着把字体文件放到“/system/fonts”,权限为“0644 rw-r--r--”,所有者和用户组均为“root”,SE上下文设成“u:object_r:system_file:s0”。哦,对了,这需要手机root了才行,我的手机还得在第三方REC里进行文件复制和属性设定。对于没有root的手机,能否实现就看对应品牌的手机情况了,我不敢包。
搞完字体,就把“/system/etc/fonts.xml”文件弄出来,在电脑上处理比在手机上处理方便。对应Android5.x或更旧版本就不是《fonts.xml》文件,而是《fallback_fonts.xml》文件。处理方式一样,就不啰嗦。
用文本编辑工具打开《fonts.xml》,在恰当位置加入图中代码,保存!
所谓“恰当位置”就是,放在所有显示英文、中文、正常符号、Emoji符号的字体条目以下,使字符在系统原有字体组合中无论怎么回溯都无法显示时才调用“新增”字体来显示,尽量不破坏系统字体显示的风格,降低对字体美观度的影响。如果对此没把握,可以放到最下方“”之前即可。
将处理完的《fonts.xml》放回手机原位置替换旧文件,属性设置与上面字体一样。重启进入手机就生效了!
看到截图里中山国两代国君的王号了吗?都是CJK扩展区字符,Android默认情况下都不能显示出来。
文字是显示出来了,但该如何输入呢?PC版的简单,按下不提,Android版的输入方式可见前文《安卓版讯飞输入法使用CJK扩展区文字的技巧》的介绍。