规范化不会保留代码点

时间:2015-08-08 22:53:39

标签: unicode character-encoding

任何人都可以解释为什么从U + 2126(Ω)和U + 03A9(Ω)的NFD归一化导致相同的表示并且不保留代码点?我本来期望NFKD和NFKC(以及带有变音符号的字符)的这种行为。

result1 = unicodedata.normalize("NFD", u"\u2126")
result2 = unicodedata.normalize("NFD", u"\u03A9")
print("NFD: " + repr(result1))
print("NFD: " + repr(result2))

输出:

NFD: u'\u03a9'
NFD: u'\u03a9'

1 个答案:

答案 0 :(得分:2)

这些被称为“单例分解”,并且存在于U + 2126(Ω)等字符中,这些字符存在于Unicode中以与现有标准兼容。它们不是“兼容性分解”(如U + 1D6C0),因为它们在视觉上和语义上都与另一个代码点相同(在这种情况下,U +03A9Ω)。

因为它们基本上复制了另一个代码点,所以一个被选为“首选形式”,另一个在规范化(任何形式)时总是被它替换。第一种形式基本上已被弃用。