在Android上,我希望能够检测所使用的字体是否可以显示某个字符,但据我所知,Check if custom font can display character
指示的传统方法无法实现这一点。要检测到这一点,我要将要检查的字符写入位图,然后我将另一个我知道缺少的字符写入另一个位图并比较位图的内容。如果它们相等则缺少角色。
问题是,是否有任何unicode角色在Android手机上通常使用的字体(或多或少)保证缺少字形?
在维基百科上阅读它时,Unicode replacement character听起来很有希望:
它用于指示系统无法呈现问题时的问题 数据流到正确的符号。它最常见于a font不包含字符,但在数据时也可以看到 无效且与任何字符都不匹配
然而,经过一些测试后,我发现这个角色并不是用来表示我的Windows 7计算机或我测试过的(Android Atrix)的Android手机上缺少的字形。
答案 0 :(得分:4)
用于渲染所用字体中缺少的字形的字形没有任何指定的Unicode值。在实际字体中,字形ID 0应始终为.notdef glyph,用于所有缺少字形的字符。但是,这些信息不可能来自Android上的字体,因此无法直接使用.notdef字形。
在Unicode中有许多保留/未分配的代码点,我的有限测试表明这些代码点是使用.notdef字形呈现的。因此,通过使用U+0978({3}}中间的保留代码点,我可以检测到我想要测试的字体中是否存在其他有效的已知字符。
这不是一个面向未来的解决方案,因为Unicode Consortium将来可能会将新的字形添加到保留的代码点。但是对于我的需求而言,它已经足够好了,因为我想做的事情是暂时的,在不久的将来不再相关。
<强>更新强>
看U + 0978的解决方案并不长久。该字符已添加到Devanagari block的Unicode 7.0版本中。另一种选择是使用unicode中存在的字形,但不太可能以普通字体使用。
June 2014块中的U+124AB可能根本不存在于许多字体中。