代码之家  ›  专栏  ›  技术社区  ›  Jonas Schäfer

为什么拉丁文小写字母DOTLESS I,结合上面的点,在NFC形式中不能被规范化为“I”?

  •  2
  • Jonas Schäfer  · 技术社区  · 8 年前

    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 +点到法线 .这有什么理由吗?这是疏忽吗?还是因为NFC被认为是NFD的完美反义词(人们不想分解)而不包括它 至无圆点 +dot)。

    1 回复  |  直到 8 年前
        1
  •  3
  •   nwellnhof    8 年前

    虽然NFC不是NFD的“完美逆”,但这源于NFC是根据与NFD相同的分解映射定义的。NFC基本上定义为NFD,然后重新组合某些NFD分解对。因为拉丁文小写字母I没有分解映射,所以它永远不会是重新组合的结果。

    推荐文章