# 9 `unicodedata` -- Unicode データベース

このモジュールは、全ての Unicode 文字の属性を定義している Unicode 文字データベースへのアクセスを提供します。このデータベース内のデータは、ftp://ftp.unicode.org/ で公開されている UnicodeData.txt ファイルのバージョン 4.1.0 に基づいています。

このモジュールは、UnicodeData ファイルフォーマット 4.1.0 (http://www.unicode.org/Public/4.1.0/ucd/UCD.html を参照）で定義されているものと、同じ名前と記号を使います。このモジュールで定義されている関数は、以下のとおりです。

`lookup`( | name)

  名前に対応する文字を探します。その名前の文字が見つ かった場合、 その Unicode 文字が返されます。見つからなかった場合には、`KeyError` を発生させます。

`name`( | unichr[, default])

  Unicode 文字 unichr に付いている名前を、文字列で返します。名前が定義されていない場合には default が返されますが、この引数が与えられていなければ `ValueError` を発生させます。

`decimal`( | unichr[, default])

  Unicode 文字 unichr に割り当てられている十進数を、整数で返します。この値が定義されていない場合には default が返されますが、この引数が与えられていなければ `ValueError` を発生させます。

`digit`( | unichr[, default])

  Unicode 文字 unichr に割り当てられている二進数を、整数で返します。この値が定義されていない場合には default が返されますが、この引数が与えられていなければ `ValueError` を発生させます。

`numeric`( | unichr[, default])

  Unicode 文字 unichr に割り当てられている数値を、float 型で返します。 この値が定義されていない場合には default が返されますが、この引 数が与えられていなければ `ValueError` を発生させます。

`category`( | unichr)

  Unicode 文字 unichr に割り当てられた、汎用カテゴリを返します。

`bidirectional`( | unichr)

  Unicode 文字 unichr に割り当てられた、双方向カテゴリを返します。そのような値が定義されていない場合、空の文字列が返されます。

`combining`( | unichr)

  Unicode 文字 unichr に割り当てられた正規結合クラスを返します。結合クラス定義されていない場合、`0` が返されます。

`east_asian_width`( | unichr)

  unichr as string. ユニコード文字unichrに割り当てられたeast asian widthを文字列で 返します。 バージョン 2.4 で 新たに追加 された仕様です。

`mirrored`( | unichr)

  Unicode 文字 unichr に割り当てられた、鏡像化のプロパティを返します。 その文字が双方向テキスト内で鏡像化された文字である場合には `1` を、それ以外の場合には `0` を返します。

`decomposition`( | unichr)

  Unicode 文字 unichr に割り当てられた、文字分解マッピングを、文字列型で返します。そのようなマッピングが定義されていない場合、空の文字列が返されます。

`normalize`( | form, unistr)

  Unicode 文字列 unistr の正規形 form を返します。 form の有効な値は、'NFC'、'NFKC'、'NFD'、'NFKD' です。

  Unicode 規格は標準等価性 (canonical equivalence) と 互換等価性 (compatibility equivalence) に基づいて、様々な Unicode文字列の正規形を定義します。Unicode では、複数の方法で表現できる文字があります。たとえば、文字 U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) は、U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA) というシーケンスとしても表現できます。

  各文字には、2つの正規形があり、それぞれ 正規形 C と 正規形 D といいます。正規形 D (NFD) は標準分解 (canonical decomposition) としても知られており、各文字を分解された形に変換します。正規形 C (NFC) は標準分解を適用した後、結合済文字を再構成します。

  互換等価性に基づいて、2つの正規形が加えられています。Unicode では、一般に他の文字との統合がサポートされている文字があります。たとえば、U+2160 (ROMAN NUMERAL ONE) は事実上 U+0049 (LATIN CAPITAL LETTER I) と同じものです。しかし、Unicode では、既存の文字集合 (たとえば gb2312) との互換性のために、これがサポートされています。

  正規形 KD (NFKD) は、互換分解 (compatibility decomposition) を適用します。すなわち、すべての互換文字を、等価な文字で置換します。 正規形 KC (NFKC) は、互換分解を適用してから、標準分解を適用します。

  バージョン 2.3 で 新たに追加 された仕様です。

更に、本モジュールは以下の定数を公開します。

`unidata_version`
  このモジュールで使われている Unicode データベースのバージョン。

  バージョン 2.3 で 新たに追加 された仕様です。

`ucd_3_2_0`
  これはモジュール全体と同じメソッドを具えたオブジェクトですが、Unicode データベース バージョン 3.2 を代わりに使っており、この特定のバージョンの Unicode データベースを 必要とするアプリケーション(IDNA など)のためものです。

  バージョン 2.5 で 新たに追加 された仕様です。

例:

    >>> unicodedata.lookup('LEFT CURLY BRACKET')
    u'{'
    >>> unicodedata.name(u'/')
    'SOLIDUS'
    >>> unicodedata.decimal(u'9')
    9
    >>> unicodedata.decimal(u'a')
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    ValueError: not a decimal
    >>> unicodedata.category(u'A')  # 'L'etter, 'u'ppercase
    'Lu'
    >>> unicodedata.bidirectional(u'\u0660') # 'A'rabic, 'N'umber
    'AN'