规范化不保留代码点

Normalization does not preserve code point

谁能解释一下为什么 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'

这些被称为 "singleton decompositions",并且存在于 Unicode 中存在的 U+2126 (Ω) 等字符,以与现有标准兼容。它们不是 "compatibility decompositions"(如 U+1D6C0 ),因为它们在视觉上和语义上都与另一个代码点(在本例中为 U+03A9 Ω)相同。

因为它们本质上重复了另一个代码点,所以选择一个作为 "preferred form",另一个在规范化(转换为任何形式)时总是被它替换。第一种形式基本上已弃用。