web-dev-qa-db-ja.com

unicodedata.normalize(form、unistr)はどのように機能しますか?

APIドキュメントでは、 http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize 。それは言う

Unicode文字列unistrの正規形formを返します。フォームの有効な値は、「NFC」、「NFKC」、「NFD」、および「NFKD」です。

ドキュメントはかなり曖昧ですが、誰かがvalid valuesをいくつかの例で説明できますか?

17
alvas

ドキュメントはかなり明確だと思いますが、ここにいくつかのコード例があります。

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」(=分解)形式は、単一の結合文字(äなど)を2文字(a + 2つのドット)に変換します。両方の「C」(=作成)形式は逆を行います。

2つの「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_equivalent を参照してください。

23
georg