【问题标题】:Unicode Font Rendering Difference in Firefox, Chrome, and SafariFirefox、Chrome 和 Safari 中的 Unicode 字体渲染差异
【发布时间】:2019-07-27 10:50:54
【问题描述】:

当我遇到这个问题时,我正在从一些文件中导入内容。某些 unicode 字符在 Chrome 和 Safari 中呈现错误(在 Firefox 中不是问题)。

有问题的符号是:र्इ

以下每个浏览器的屏幕截图:

火狐

Safari

我发现其他使用相同字符的网页(通过简单的 Google 搜索)也有同样的问题。下面是一些例子:

这是什么原因造成的?是无效字符,还是页面字体问题?

问题在于只有几个字符。大多数内容在所有浏览器中都可以正常呈现。

【问题讨论】:

    标签: google-chrome unicode fonts rendering combining-marks


    【解决方案1】:

    梵文字形 र्इ 是一个连字,由三个 Unicode 字符组成:

    1. (U+0930) 梵文字母 Ra
    2. (U+094D) 梵文符号维拉玛
    3. (U+0907) 梵文字母 I

    其中的第二个,Virama,是一个变音符号,用于表示元音,通常是它所附加的字母发音的一部分,应该在语音中被抑制。当 与这个变音符号组合时,生成的字母如下所示:र्

    许多天城文字母可以组合成连字。在拉丁文字中,连字通常与组成它们的字母相似——例如,æ 可以清楚地识别为 a 的组合e - 但情况并非总是如此:与号 &例如,起源于 et 的连字。

    在您找到的示例中,र् 的组合可以写成 र्‌इर्इ 1 …意思相同,都为梵文读者所理解。

    因此,Firefox 和 Safari 都可以正确显示字符。 Chrome 不是,这可能是正在使用的字体或 Chrome 本身的问题。


    1 在我机器上的 Firefox 中,使用能够呈现适当连字的字体,这两个看起来不同(因为我在中间添加了一个 Zero Width Non-Joiner一个但不是另一个)。在这种情况下,您的里程可能会有所不同。

    【讨论】:

    • 谢谢。这在一定程度上有助于理解这个问题。直到现在我才知道结扎!我发现我只用两个字母面临这个问题,所以现在我在将文本保存到 DB 之前运行替换功能。 replace 函数基本上用 ई(显然是单个 unicode 字符)替换所有出现的 र्इ(连字,错误的)。由于连字不是在所有浏览器中一致呈现,这似乎是唯一的解决方案。你有什么建议?
    • 我会在渲染文本时(即在将其发送到浏览器之前)而不是在保存文本时执行替换,因为后者具有破坏性。替换数据库中的字符后,如果不将原始文本中的单个字符 ई 替换为连字 र्इ,就无法撤消该操作。请注意,根据 Unicode Consortium,र्इ 和 ई 在含义上相同,而只是 confusable(就像 0 和 O 在拉丁语中容易混淆一样脚本)。
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 2016-11-22
    • 2015-08-02
    • 1970-01-01
    • 2020-11-25
    • 2012-10-11
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多