同一个角色可以有2种不同的UTF-8编码吗?

Gen*_*ent 4 perl utf-8 character-encoding

我正在编写一个需要将其输入从UTF-8转码为ISO-8859-1(Latin 1)的应用程序.

一切正常,除了我有时会对某些变形字符进行奇怪的编码.例如,带有2个点(0xEB)的Latin 1 E通常为UTF-8 0xC3 0xAB,但有时也为0xC3 0x83 0xC2 0xAB.

这种情况多次来自不同的来源并注意到第一个和最后一个字符符合我的预期,是否存在我的图书馆不知道的编码规则?

Dar*_*ust 9

某些Unicode字符可以以组合分解的形式表示.例如,德语变音符号ü可以由单个字符表示,也可以üu后跟表示¨,然后文本渲染器将组合.

有关血淋淋的细节,请参阅Wikipedia关于Unicode等效性的文章.

因此,Unicode库通常提供方法或函数来将字符串规范化为一种或另一种形式,以便您可以比较它们.

  • @daxim:怎么样?他询问了编码规则,我告诉了他. (4认同)

dax*_*xim 9

$ "\xC3\x83\xC2\xAB"
ë
$ use Encode

$ decode 'UTF-8', "\xC3\x83\xC2\xAB"
ë
Run Code Online (Sandbox Code Playgroud)

你有双重编码的UTF-8.Encode :: Repair是解决这个问题的一种方法.