Android 是否有任何unicode字符';所有字体中都缺少s字形?

Android 是否有任何unicode字符';所有字体中都缺少s字形?,android,unicode,fonts,Android,Unicode,Fonts,在Android上,我希望能够检测所使用的字体是否可以显示某个字符,但据我所知,这是不可能的 为了检测这一点,我将要检查的字符写入位图,然后将另一个我知道缺少的字符写入另一个位图,并比较位图的内容。如果它们相等,则缺少字符 问题是,是否有任何unicode字符的字形(或多或少)保证在Android手机上通常使用的字体上丢失? 在维基百科上读到它时,听起来很有希望: 它用于指示系统无法渲染图像时出现的问题 将数据流转换为正确的符号。最常见的情况是 字体不包含字符,但在显示数据时也可以看到 无效且不

在Android上,我希望能够检测所使用的字体是否可以显示某个字符,但据我所知,这是不可能的

为了检测这一点,我将要检查的字符写入位图,然后将另一个我知道缺少的字符写入另一个位图,并比较位图的内容。如果它们相等,则缺少字符

问题是,是否有任何unicode字符的字形(或多或少)保证在Android手机上通常使用的字体上丢失?

在维基百科上读到它时,听起来很有希望:

它用于指示系统无法渲染图像时出现的问题 将数据流转换为正确的符号。最常见的情况是 字体不包含字符,但在显示数据时也可以看到 无效且不匹配任何字符


然而,在做了一点测试之后,我发现在我的Windows 7计算机或我测试过的Android手机(Motorola Atrix)上,这个字符都不用于表示缺少的字形。

没有任何指定的Unicode值用于表示所用字体中缺少的字形。在实际字体中,字形id 0应始终是用于缺少字形的所有字符的。但是,不可能从Android上的字体获取此信息,因此不可能直接使用.notdef标志符号

在Unicode中有许多保留/未分配的代码点,我有限的测试表明这些代码点是使用.notdef标志符呈现的。因此,通过使用中间的预留代码点,我可以检测是否有其他有效的、已知的字符存在于我想要测试的字体中。 这不是一个经得起未来考验的解决方案,因为将来Unicode联盟可能会向保留代码点添加新的标志符号。但对于我的需求来说,这已经足够好了,因为我想做的只是暂时的事情,在不久的将来不再相关

更新:


查看U+0978的解决方案没有用多久。该角色已添加到中的版本中。另一种选择是使用unicode中存在的字形,但在普通字体中不太可能使用


在块中可能有一些在许多字体中根本不存在的东西。

Unicode包含超过110000个字符的指令集,限制为1114112个代码点。因此,在不太可能的情况下,字体具有所有字形(支持所有书写系统、所有语言),仅使用10%的可用代码点。其余的都是空的。如果渲染空白图示符怎么办?你现在知道“缺少字符glyph”了吗?我不知道“缺少字符glyph”,一些谷歌搜索建议U+0000可以/应该用于字体中缺少的字符。但是,在我用U+0000测试过的至少一种字体中,缺少的字符被渲染为正方形(类似于U+25A1),而被渲染为空白。我想我的最佳选择是使用一些保留/未分配的unicode字符。U+0000通常用于标记字符串的结尾。您需要.notdef,unicode值未定义:字符在相同类型的块中分配。大多数块的末尾都有一些未指定的点,以开始整数上的下一个块。这些点允许Unicode Consortium向块中添加新的图示符。新的符号并不经常出现。看见也许你可以在打字爱好者论坛上问你的问题。他们可以告诉你更多关于这到底是如何工作的以及如何呈现的。notdef谢谢“OpenType字体推荐”链接,这对我很有用。看起来我把字形id 0与unicode代码点U+0000混淆了。对于我试图做的事情,使用一个保留的代码点应该足够好(见我自己的答案)。是的,它是重复的。想要检测丢失的象形文字的原因稍有不同(用户自动检测与手动检测),但实际问题是相同的。从技术上讲,U+25A1是一个流行的选择,因为它有注释“可能用于表示丢失的表意文字”——或者也可以使用U+20DE。这直接来自于当前的Unicode规范:了解这一点很有用。然而,它不能用于我的特殊情况,因为它们只“可能”用于那个目的。例如,在Roboto字体U+25A1和U+20DE中都缺少一个字形。“另一个选项是使用unicode中存在的字形,但不太可能在普通字体中使用。”-可能无法与Noto一起使用(Noto尝试为unicode中的每个字符提供字形)。但是,您可能会使用私人使用的区号点。这里有很多这样的字符,Unicode永远不会对“真实”字符进行编码。