google-chrome - 为什么chrome渲染不同的unicode字符””(U+2F804)”和你”(U+4F60)是同一个字符
问题描述
在Windows 7系统中,Chrome使用“微软雅黑”字体将字符U+2F804()显示为U+4F60(你)
但是这个字体中没有U+2F804对应的字符。
使用 fontCreator 找到的结果如下所示
在 windows 10 系统中,因为有 Yu Gothic 字体,所以结果是正确的。
令我困惑的是为什么 Windows 7 会显示为 U+4F60(你)
代码地址为:<a href="http://yanglikun.github.io/encoding/code.html" rel="nofollow noreferrer">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中,所以重要的部分是兼容性,这也被 wikipedia 文章 ( https://en.wikipedia.org/wiki/CJK_Compatibility_Ideographs_Supplement ) 证实。
通过提供其他编码的无损往返转换,引入了兼容性代码点以简化 Unicode 的引入。[以这种方式,可以在不同的层上实现 Unicode,没有问题并且完全透明,并且不需要更改其他层(或更糟糕的是:一步更改所有堆栈)。
推荐阅读
- nginx - 为什么 ingress-nginx-controller pod 总是与端点建立 IPv4 TCP 连接?
- javascript - 如何修复最大更新深度超出错误?
- r - 如何在 R 中匹配大数据框和 rbind
- groovy - 基于匹配计数值,需要将以下值捕获到变量中
- c# - 返回另一个解决方案中的类的实例
- javascript - 单击按钮时不调用方法
- c# - 我的项目在 Visual Studio 中工作,但在系统上安装后无法工作
- c# - 列表只打印最后一个元素
- python-3.x - 如何遍历字典以获取特定键,然后将其添加到新字典
- ldap - 当基本 DN 的最低元素只是组 CN 时,LDAP 搜索过滤器字符串和基本 DN 语法组合以获取匹配“sAMAccountName”的用户?