Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのstringprepモジュールで学ぶUnicode文字列の事前準備

stringprep(文字列準備)とは

インターネット上でさまざまな識別子を扱う際には、それらが等しいかどうかを比較する必要があります。しかし、比較の手順はアプリケーションの分野によって異なり、たとえば大文字と小文字を区別しないケースなども存在します。こうした情報を確認し、文字列を適切に正規化するために使われるのが stringprep(文字列準備)です。

RFC 3454では、Unicode文字列をネットワーク上へ送信する前に施すべき「準備」の手順が定義されています。この準備プロセスを経た文字列は、一定の正規化された形式を持つことになります。

RFCでは一連のテーブルが定義されており、これらのテーブルを組み合わせて「プロファイル」を作成できます。stringprepプロファイルの代表例が nameprep で、国際化ドメイン名(IDN)の処理などに利用されています。

テーブルの2つの種類

stringprepのテーブルには セット(set)マッピング(mappings) の2種類があります。セット型のテーブルでは、指定した文字がそのテーブルに含まれていればTrueを、含まれていなければFalseを返します。一方、マッピング型のテーブルでは、キーとなるコードポイントを渡すと、それに対応する値が返されます。

このモジュールを使用するには、コード内でstringprepモジュールをインポートします。

import stringprep

stringprepの主なテーブル一覧

番号 テーブルと説明
1

stringprep.in_table_a1(code)

Unicode 3.2における未割り当てのコードポイント

2

stringprep.in_table_b1(code)

一般的に何にもマッピングされない(削除される)文字

3

stringprep.in_table_b2(code)

テーブルB.2へのマッピング値を返す。NFKCケースフォールディング用のマッピング

4

stringprep.in_table_b3(code)

正規化を行わないケースフォールディングのマッピング

5

stringprep.in_table_c11(code)

ASCII空白文字

6

stringprep.in_table_c12(code)

非ASCII空白文字

7

stringprep.in_table_c11_c12(code)

ASCIIおよび非ASCII空白文字の組み合わせ

8

stringprep.in_table_c21(code)

ASCII制御文字

9

stringprep.in_table_c22(code)

非ASCII制御文字

10

stringprep.in_table_c21_c22(code)

ASCIIおよび非ASCII制御文字の組み合わせ

11

stringprep.in_table_c3(code)

私用目的の文字

12

stringprep.in_table_c4(code)

非文字コードポイント

13

stringprep.in_table_c5(code)

サロゲートコード

14

stringprep.in_table_c6(code)

プレーンテキストに不適切な文字

15

stringprep.in_table_c7(code)

正準表現に不適切な文字

16

stringprep.in_table_c8(code)

表示特性を変化させるコード

17

stringprep.in_table_c9(code)

タグ付け文字

18

stringprep.in_table_d1(code)

双方向プロパティが「R」または「AL」である文字

19

stringprep.in_table_d2(code)

双方向プロパティが「L」である文字

サンプルコード

import stringprep as sp
print('\u0020') # 空白文字を出力
print(sp.in_table_c11('\u0020')) # ASCII空白文字に含まれるためTrue
print(sp.in_table_d2('L')) # 文字Lは左から右への双方向プロパティを持つためTrue
print(sp.in_table_d1('L')) # 文字Lは右から左への双方向プロパティを持たないためFalse

実行結果

 
True
True
False

  1. Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説

    Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial

  2. 【Python】文字列として書かれたPythonコードを実行する方法:exec()とeval()の使い分け

    exec()でPythonのステートメントを実行する 文字列として記述されたPythonのコード(ステートメント)を実際に実行したい場合は、組み込み関数のexec()を使用します。引数に渡された文字列がPythonのコードとして解釈され、その場で実行されます。 >>> my_code = print(Hello World!) >>> exec(my_code) Hello World! 上記の例では、変数my_codeに格納された文字列がexec()によってコードとして評価され、「Hello World!」が出力されています。 eval()で式の値を評価