我有两个 Unicode 字符串,即使归一化后也不同。但是,当它们被编码为 UTF-8 时,它们是相同的。我想了解如何(也许为什么)它们不同。
它们都是实体的标识符,查找失败是因为标识符错误,然而作为字节字符串它们是相同的,所以我想了解我们如何得到不同的 Unicode 字符串(它们已由不同的子系统处理),以及我如何知道它们实际上是相同的。
"\u8a92\u6089\u5bfd\u4267\ucdb7\u5727\u4039\U0002ae18\U00025314\u30c3"
和:
"\u8a92\u6089\u5bfd\u4267\ucdb7\u5727\u4039\ud86b\ude18\ud854\udf14\u30c3"
问题似乎并非在归一化上。我意识到这个问题的元素是无法回答的,但我会感激任何线索!
>>> a = u"\u8a92\u6089\u5bfd\u4267\ucdb7\u5727\u4039\ud86b\ude18\ud854\udf14\u30c3"
>>> b = u"\u8a92\u6089\u5bfd\u4267\ucdb7\u5727\u4039\U0002ae18\U00025314\u30c3"
>>> a == b
False
>>> import unicodedata
>>> unicodedata.normalize('NFKD', a) == unicodedata.normalize('NFKD', b)
False
>>> a.encode('UTF-8') == b.encode('UTF-8')
True
a
没有被正确解码。正如@snakecharmerb所指出的,最近版本的Python将认为该字符串已经损坏;但是Python 2.7似乎可以允许这种情况发生。 - lenz