stringprep --- インターネットの文字列調製

ソースコード: Lib/stringprep.py


(ホスト名のような) インターネット上にある存在に識別名をつける際、しばしば識別名間の "等価性" 比較を行う必要があります。厳密には、例えば大小文字の区別をするかしないかいったように、比較をどのように行うかはアプリケーションの領域に依存します。また、例えば "印字可能な" 文字で構成された識別名だけを許可するといったように、可能な識別名を制限することも必要となるかもしれません。

RFC 3454 では、インターネットプロトコル上で Unicode 文字列を "調製 (prepare)" するためのプロシジャを定義しています。文字列は通信路に載せられる前に調製プロシジャで処理され、その結果ある正規化された形式になります。RFC ではあるテーブルの集合を定義しており、それらはプロファイルにまとめられています。各プロファイルでは、どのテーブルを使い、 stringprep プロシジャのどのオプション部分がプロファイルの一部になっているかを定義しています。 stringprep プロファイルの一つの例は nameprep で、国際化されたドメイン名に使われます。

stringprep モジュールは RFC 3454 のテーブルだけを公開します。 これらのテーブルを辞書やリストで表すと非常に大きくなるため、内部では Unicode 文字データベースを使っています。 モジュールのソースコード自体は mkstringprep.py ユーティリティで生成されました。

そのため、これらのテーブルはデータ構造ではなく関数として公開されます。 RFC には集合とマッピングの 2 種類のテーブルがあります。 集合に対しては、stringprep は「特性関数」、つまり引数が集合に含まれていれば True を返す関数を提供します。 マッピングに対しては、キーを受け取って対応する値を返す関数を提供します。 以下にモジュール内のすべての関数を示します。

stringprep.in_table_a1(code)

code がテーブル A.1 (Unicode 3.2 における未割り当てコードポイント: unassigned code point) かどうか判定します。

stringprep.in_table_b1(code)

code がテーブル B.1 (通常、空文字列に対応付けて削除する文字) に含まれるかどうかを判定します。

stringprep.map_table_b2(code)

テーブル B.2 (NFKC で用いられる大小文字の対応付け) に従って、code に対応付けられた値を返します。

stringprep.map_table_b3(code)

テーブル B.3 (正規化を伴わない大小文字の対応付け) に従って、code に対応付けられた値を返します。

stringprep.in_table_c11(code)

code がテーブル C.1.1 (ASCII スペース文字) かどうか判定します。

stringprep.in_table_c12(code)

code がテーブル C.1.2 (非 ASCII スペース文字) かどうか判定します。

stringprep.in_table_c11_c12(code)

code がテーブル C.1 (スペース文字、C.1.1 および C.1.2 の和集合) かどうか判定します。

stringprep.in_table_c21(code)

code がテーブル C.2.1 (ASCII 制御文字) かどうか判定します。

stringprep.in_table_c22(code)

code がテーブル C.2.2 (非 ASCII 制御文字) かどうか判定します。

stringprep.in_table_c21_c22(code)

code がテーブル C.2 (制御文字、C.2.1 および C.2.2 の和集合) かどうか判定します。

stringprep.in_table_c3(code)

code がテーブル C.3 (プライベート利用) かどうか判定します。

stringprep.in_table_c4(code)

code がテーブル C.4 (非文字コードポイント: non-character code points) かどうか判定します。

stringprep.in_table_c5(code)

code がテーブル C.5 (サロゲートコード) に含まれるかどうかを判定します。

stringprep.in_table_c6(code)

code がテーブル C.6 (平文:plain text として不適切) かどうか判定します。

stringprep.in_table_c7(code)

code がテーブル C.7 (標準表現:canonical representation として不適切) かどうか判定します。

stringprep.in_table_c8(code)

code がテーブル C.8 (表示属性を変更する文字、または非推奨の文字) に含まれるかどうかを判定します。

stringprep.in_table_c9(code)

code がテーブル C.9 (タグ文字) かどうか判定します。

stringprep.in_table_d1(code)

code がテーブル D.1 (双方向プロパティ "R" または "AL" を持つ文字) かどうか判定します。

stringprep.in_table_d2(code)

code がテーブル D.2 (双方向プロパティ "L" を持つ文字) かどうか判定します。