在Android上,我希望能够检测所使用的字体是否可以显示某个字符,但据我所知,这是不可能的,如 Check if custom font can display character所示的常规方法
为了检测这个,我正在写一个我要检查的字符到一个位图,然后我写另一个我知道的字符丢失到另一个位图并比较位图的内容.如果它们相等则缺少角色.
问题是,是否有任何unicode角色的字形(或多或少)保证在Android手机上常用的字体上缺失?
在维基百科上阅读它时,Unicode replacement character听起来很有希望:
It is used to indicate problems when a system is not able to render a
stream of data to a correct symbol. It is most commonly seen when a
font does not contain a character,but is also seen when the data is
invalid and does not match any character
但是经过一些测试后,我发现这个角色并不是用来表示我的Windows 7计算机或我测试过的Android手机(Motorola Atrix)上缺少的字形.
解决方法
在Unicode中有许多保留/未分配的代码点,我的有限测试表明这些代码点是使用.notdef字形呈现的.因此,通过使用U+0978(Devanagari block中间的保留代码点),我可以检测到我想要测试的字体中是否存在其他有效的已知字符.
这不是一个未来的证明解决方案,因为Unicode Consortium将来可能会将新的字形添加到保留的代码点.但是对于我的需求来说,它已经足够好了,因为我想做的事情是在不久的将来不再相关的临时事情.
更新:
看看U 0978的解决方案并不长久.该字符在Unicode 7.0版本的June 2014中添加.另一个选项是使用unicode中存在的字形,但不太可能以普通字体使用.
Early Dynastic Cuneiform块中的U+124AB可能是许多字体中根本不存在的东西.