Unicode 所有浏览器中的奇怪字体编码
我们有一些编码问题,这使得文本在不同的浏览器中看起来不同。在不同浏览器中考虑这个jsFoDels: 文本的正确外观应如下所示:Unicode 所有浏览器中的奇怪字体编码,unicode,encoding,utf-8,Unicode,Encoding,Utf 8,我们有一些编码问题,这使得文本在不同的浏览器中看起来不同。在不同浏览器中考虑这个jsFoDels: 文本的正确外观应如下所示: 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 d
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看起来更奇怪:
我的印象是,这种字体实际上分为字符和变音符号。但是我怎么才能解决这个问题呢?有什么算法或工具吗?我们正在使用Java,因此我们必须在其中实现它。对于后一个Firefox实例:为了提高互操作性,W3C建议在Web上使用NFC标准化文本,请参见 根据Oracle Java教程,我建议使用以下规范化方法: 参见a complex,版权c 1995年、2008年,Oracle和/或其附属公司。版权所有 例如,粘贴的单词Můžete copy中的分解字符可能会被错误地呈现为 může t e 8个分解字符,而不是 Může t e 6个预合成字符。 请注意,在相邻glyph之间添加了空格,以便正确渲染组合重音 不幸的是,我不能给出Java中规范化方法的示例;相反,下面是PowerShell的相应的.Normalize方法示例:
PS D:\PShell> 'Může' | Get-CharInfo | Format-Table -AutoSize -Wrap
Char CodePoint Category Description
---- --------- -------- -----------
M U+004D UppercaseLetter Latin Capital Letter M
u U+0075 LowercaseLetter Latin Small Letter U
̊ U+030A NonSpacingMark Combining Ring Above
z U+007A LowercaseLetter Latin Small Letter Z
̌ U+030C NonSpacingMark Combining Caron
e U+0065 LowercaseLetter Latin Small Letter E
PS D:\PShell> 'Může'.Normalize('FormC') | Get-CharInfo | Format-Table -AutoSize -Wrap
Char CodePoint Category Description
---- --------- -------- -----------
M U+004D UppercaseLetter Latin Capital Letter M
ů U+016F LowercaseLetter Latin Small Letter U With Ring Above
ž U+017E LowercaseLetter Latin Small Letter Z With Caron
e U+0065 LowercaseLetter Latin Small Letter E
PS D:\PShell>
以下是:
另请参见。关于后一个Firefox实例:您使用的是什么文本/html编辑器?这个例如,Měšťa n s k ém而不是měťa n s kém在相邻字形之间添加了空格,以正确地呈现组合重音。顺便说一句,这个问题属于超级用户…另请参阅。为了提高互操作性,W3C建议在Web上使用NFC规范化文本。这些文本只是由我们的编辑从另一个站点复制粘贴的。他们只是普通人,不了解背后的任何技术细节。我需要实现一些东西来修复文本结构,这样我们的编辑就不用担心了。我将把它发布在这里,而不是超级用户上,因为我将实现一个Java代码来解决这个问题。我很乐意对其进行重新规范化,但我不知道如何进行。Oracle Java教程?我猜您使用的web字体不包含文本中某些字符的字形。浏览器随后将替换另一种字体的字形。这就解释了不同外观标志符号的混合。
PS D:\PShell> 'Může' | Get-CharInfo | Format-Table -AutoSize -Wrap
Char CodePoint Category Description
---- --------- -------- -----------
M U+004D UppercaseLetter Latin Capital Letter M
u U+0075 LowercaseLetter Latin Small Letter U
̊ U+030A NonSpacingMark Combining Ring Above
z U+007A LowercaseLetter Latin Small Letter Z
̌ U+030C NonSpacingMark Combining Caron
e U+0065 LowercaseLetter Latin Small Letter E
PS D:\PShell> 'Může'.Normalize('FormC') | Get-CharInfo | Format-Table -AutoSize -Wrap
Char CodePoint Category Description
---- --------- -------- -----------
M U+004D UppercaseLetter Latin Capital Letter M
ů U+016F LowercaseLetter Latin Small Letter U With Ring Above
ž U+017E LowercaseLetter Latin Small Letter Z With Caron
e U+0065 LowercaseLetter Latin Small Letter E
PS D:\PShell>
import unicodedata
unistr = 'Můžete' # copy-pasted from Apple Museum
print ( 'decomposed', unistr)
print ( 'normalized', unicodedata.normalize('NFC', unistr))