Подтвердить что ты не робот

Может ли кто-нибудь объяснить, как unicodedata.normalize(form, unistr) работает с примерами?

Итак, в документе API, http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize. В нем говорится:

Возвращает форму обычной формы для Unistode string unistr. Допустимыми значениями для формы являются "NFC", "NFKC", "NFD" и "NFKD".

Документация довольно расплывчата, может кто-нибудь объяснить valid values несколькими примерами?

4b9b3361

Ответ 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.