为什么chrome渲染不同的unicode字符””(U+2F804)”和你”(U+4F60)是相同的字符

Why does chrome render different unicode characters ””(U+2F804)”和你”(U+4F60) are the same characters

在Windows7系统中,Chrome使用"Microsoft YaHei"字体将字符U+2F804()显示为U+4F60(你)

但是这个字体没有U+2F804对应的字符

使用fontCreator找到的结果如下图

在windows10系统中,因为有Yu Gothic字体,所以结果是正确的。

令我困惑的是为什么Windows 7会显示为U+4F60(你)

代码的URL是:http://yanglikun.github.io/encoding/code.html

我觉得微软雅黑字体没有对应字符时应该显示问号、口、或其他字符,而不是错误字符U+4F60(你)

注意:unicode 代码点和字体字形没有直接关系。实际字形取决于上下文、连字、组合字符、语言和可能的其他因素(参见 Unicode 标准)。

Unicode 定义 U+2F804 可分解为 U+4F60。 Unicode 文本通常由软件规范化。要么通过分解它们(经常将字符和重音分开,例如对于拉丁语),要么通过组合它们。此类算法在 Unicode 中进行了描述。所以在那种情况下,它被认为 U+4F60 在语义上完全等于 U+2F804 (和首选形式)。包含相同数量代码点的分解并不常见(但也不是看不见的)。并且也经常出现一个方向分解,另一方向没有关系的情况。

这个字符在CJK Compatibility Ideographs Supplement中,所以重要的部分是compatibility,这也被维基百科文章证实( https://en.wikipedia.org/wiki/CJK_Compatibility_Ideographs_Supplement).

通过提供其他编码的无损往返转换,引入了兼容性代码点以简化 Unicode 的引入。 [以这种方式,可以在不同的层上实现 Unicode,没有问题并且完全透明,并且不需要更改其他层(或更糟:一步更改所有堆栈)。