В Википедии в основном говорится следующее для четырех значений unistr
.
- NFC (Normalization Form Canonical Composition)
- Characters are decomposed
- then recomposed by canonical equivalence.
- NFKC (Normalization Form Compatibility Composition)
- Characters are decomposed by compatibility
- recomposed by canonical equivalence
- NFD (Normalization Form Canonical Decomposition)
- Characters are decomposed by canonical equivalence
- multiple combining characters are arranged in a specific order.
- NFKD (Normalization Form Compatibility Decomposition)
- Characters are decomposed by compatibility
- multiple combining characters are arranged in a specific order.
Так что для каждого из вариантов это двухшаговое преобразование? Но normalize () показывает только конечный результат. Есть ли способ увидеть промежуточные результаты?
Вики также говорят:
Например, отдельные строки Unicode "U + 212B" (знак ангстрема "Å") и " U + 00C5 "(буква Swedi sh" Å ") расширяется с помощью NFD (или NFKD) в последовательность" U + 0041 U + 030A "(латинская буква" A "и объединяющее кольцо над" ° "), которая затем уменьшается на NF C (или NFK C) до «U + 00C5» (Swedi sh буква «Å»).
Но я не могу воспроизвести его с normalize()
. Кто-нибудь может привести больше примеров, чтобы показать, как работают эти четыре варианта? В чем их отличия?
>>> from unicodedata import normalize
>>> print(normalize('NFC', 'A°'))
A°
>>> print(normalize('NFKC', 'A°'))
A°
>>> print(normalize('NFD', 'Å'))
Å
>>> print(normalize('NFKD', 'Å'))
Å
>>> len(normalize('NFC', 'A°'))
2
>>> len(normalize('NFKC', 'A°'))
2
>>> len(normalize('NFD', 'Å'))
2
>>> len(normalize('NFKD', 'Å'))
2