规范化不保留代码点
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",另一个在规范化(转换为任何形式)时总是被它替换。第一种形式基本上已弃用。
谁能解释一下为什么 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",另一个在规范化(转换为任何形式)时总是被它替换。第一种形式基本上已弃用。