Ответ 1
Я нашел документацию довольно понятной, но вот несколько примеров кода:
from unicodedata import normalize
print '%r' % normalize('NFD', u'\u00C7') # decompose: convert Ç to "C + ̧"
print '%r' % normalize('NFC', u'C\u0327') # compose: convert "C + ̧" to Ç
Обе формы "D" (= декомпозиция) преобразуют один комбинированный символ (например, ä
) в два символа (a
+ две точки). Формы "C" (= compose) имеют обратную сторону.
Две формы "K" используются для преобразования символов, добавленных в Unicode для целей совместимости. Например, для поддержки программного обеспечения, которое не может рисовать круги вокруг символов, существует набор "круговых чисел", например ① (номер юникода 2460). Когда мы применяем к нему каноническое разложение (NFD), оно ничего не делает:
print '%r' % normalize('NFD', u'\u2460') # u'\u2460'
Однако декомпозиция совместимости (NFKD) вернет соответствующий "совместимый" символ:
print '%r' % normalize('NFKD', u'\u2460') # 1
Подробнее см. http://en.wikipedia.org/wiki/Unicode_equivalence.