【发布时间】:2017-02-06 20:10:55
【问题描述】:
我们遇到了一些编码问题,导致文本在不同的浏览器中看起来不同。在不同的浏览器中考虑这个 jsfiddle:
https://jsfiddle.net/w3297yLt/
文本应该看起来像这样:
Apple Museum je první muzeum svého druhu v České republice,
které bylo nedávno otevřeno v Husově ulici v centru Prahy.
Můžete zde nahlédnout do nedávné minulosti a vžít se do doby,
kdy Steve Jobs sestrojil spolu se Stevem Wozniakem v garáži
svých rodičů první osobní ...
请注意,这不是字体问题,这发生在完全正确的字体上。
Chrome(请注意,它甚至会阻止非变音符号字符,检查单词garáži):
火狐:
Safari(类似于 Chrome,但不会出现garáži 的问题):
乍一看,文本看起来是正确的,但似乎存在一些问题。使用我们网站上的 Firefox,它看起来更奇怪 (https://goout.net/cs/muzea/apple-museum/wucb/):
我的印象是字体实际上是分为字符和变音符号。但是我该如何解决这个问题?有什么算法或工具吗?我们使用的是 Java,所以我们必须在其中实现它。
【问题讨论】:
-
对于后一个 Firefox 实例:您使用的是什么文本/html 编辑器? text is not normalised but decomposed。例如,
m e ̌ s ̌ t ̌ a n s k e ́ m而不是m ě š ť a n s k é m(在相邻字形之间添加空格以正确呈现组合重音符号)。顺便说一句,这个问题属于超级用户…… -
另见Text run is not in Unicode Normalization Form C。 为提高互操作性,W3C 建议在 Web 上使用 NFC 规范化文本。
-
此文本只是由我们的编辑从另一个站点复制粘贴的。他们只是普通人,不了解背后的任何技术细节。我需要实现一些东西来修复文本结构,这样我们的编辑就不用担心了。我将它发布在这里而不是超级用户,因为我将实现一个 Java 代码来解决这个问题。我很乐意重新规范化它,但我不知道如何。
-
Oracle Java Normalizing Text 教程?
-
我猜您使用的网络字体不包含文本中某些字符的字形。然后浏览器将用另一种字体替换字形。这可以解释不同外观字形的混合。