为什么 LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE 没有规范化为 NFC 形式的 "i"?
Why do LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE not get normalized to "i" in NFC form?
Python中的示例:
>>> s = 'ı̇'
>>> len(s)
2
>>> list(s)
['ı', '̇']
>>> print(", ".join(map(unicodedata.name, s)))
LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE
>>> normalized = unicodedata.normalize('NFC', s)
>>> print(", ".join(map(unicodedata.name, normalized)))
LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE
如您所见,NFC 规范化不会将无点 i
+ 点组合成正常 i
。这样做有道理吗?这是疏忽吗?或者它不包括在内,因为 NFC 应该是 NFD 的完美逆向(并且人们不想将 i
分解为无点 i
+ 点)。
虽然 NFC 不是 NFD 的 "perfect inverse",但这是因为 NFC 是根据与 NFD 相同的分解映射定义的。 NFC 基本上定义为 NFD,然后重组某些 NFD 分解对。由于拉丁文小写字母 I 没有分解映射,因此它永远不可能是重组的结果。
Python中的示例:
>>> s = 'ı̇'
>>> len(s)
2
>>> list(s)
['ı', '̇']
>>> print(", ".join(map(unicodedata.name, s)))
LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE
>>> normalized = unicodedata.normalize('NFC', s)
>>> print(", ".join(map(unicodedata.name, normalized)))
LATIN SMALL LETTER DOTLESS I, COMBINING DOT ABOVE
如您所见,NFC 规范化不会将无点 i
+ 点组合成正常 i
。这样做有道理吗?这是疏忽吗?或者它不包括在内,因为 NFC 应该是 NFD 的完美逆向(并且人们不想将 i
分解为无点 i
+ 点)。
虽然 NFC 不是 NFD 的 "perfect inverse",但这是因为 NFC 是根据与 NFD 相同的分解映射定义的。 NFC 基本上定义为 NFD,然后重组某些 NFD 分解对。由于拉丁文小写字母 I 没有分解映射,因此它永远不可能是重组的结果。