"stringprep" --- 網際網路字串的準備
***********************************

**原始碼：**Lib/stringprep.py

======================================================================

在網際網路上識別事物（例如主機名稱）時，通常需要比較這些識別器的「相等
性 (equality)」。比較的具體執行方式可能取決於應用程式領域，例如是否應
該不區分大小寫。也可能有必要限制可能的識別器，只允許由「可列印
(printable)」字元組成的識別器。

**RFC 3454** 定義了在網際網路通訊協定中「準備」Unicode 字串的程序。在
傳送字串到網路之前，先使用準備程序處理字串，之後字串就具有特定的規範化
(normalized) 形式。RFC 定義了一系列的表，這些表可以組合成設定檔
(profile)。每個設定檔必須定義它使用哪些表以及 "stringprep" 程序的哪些
其他可選部分是設定檔的一部分。"stringprep" 配置文件的一個例子是
"nameprep"，它被用於國際化網域名稱。

"stringprep" 模組只開放 **RFC 3454** 中的表。由於這些表如果以字典或串
列的方式來表示的話會非常大，因此模組內部使用 Unicode 字元資料庫。模組
原始碼本身是使用 "mkstringprep.py" 工具來產生的。

因此，這些表是以函式而非資料結構的形式呈現。RFC 中有兩種表：集合
(sets) 和對映 (mappings)。對於集合，"stringprep" 提供了「特徵函式
(characteristic function)」，也就是如果參數是集合的一部分就回傳 "True"
的函式。對於對映，它提供了對映函式：給定鍵，它會回傳相關的值。以下是模
組中所有可用函式的清單。

stringprep.in_table_a1(code)

   判斷 *code* 是否在 tableA.1（Unicode 3.2 中未指定的編碼位置 (code
   point)）中。

stringprep.in_table_b1(code)

   判斷 *code* 是否在 tableB.1（通常沒有對映到任何東西）中。

stringprep.map_table_b2(code)

   根據 tableB.2（使用 NFKC 形式的大小寫折疊 (case-folding) 對映）回傳
   *code* 的對映值。

stringprep.map_table_b3(code)

   根據 tableB.3（使用沒有規範化的大小寫折疊對映）回傳 *code* 的對映值
   。

stringprep.in_table_c11(code)

   判斷 *code* 是否在 tableC.1.1（ASCII 空格字元）中。

stringprep.in_table_c12(code)

   判斷 *code* 是否在 tableC.1.2（非 ASCII 空格字元）中。

stringprep.in_table_c11_c12(code)

   判斷 *code* 是否在 tableC.1（空格字元，為 C.1.1 和 C.1.2 的聯集）中
   。

stringprep.in_table_c21(code)

   判斷 *code* 是否在 tableC.2.1（ASCII 控制字元）中。

stringprep.in_table_c22(code)

   判斷 *code* 是否在 tableC.2.2（非 ASCII 控制字元）中。

stringprep.in_table_c21_c22(code)

   判斷 *code* 是否在 tableC.2（控制字元，為 C.2.1 和 C.2.2 的聯集）中
   。

stringprep.in_table_c3(code)

   判斷 *code* 是否在 tableC.3（私有使用）中。

stringprep.in_table_c4(code)

   判斷 *code* 是否在 tableC.4（非字元編碼位置）中。

stringprep.in_table_c5(code)

   判斷 *code* 是否在 tableC.5（代理碼）中。

stringprep.in_table_c6(code)

   判斷 *code* 是否在 tableC.6（不適用於純文字）中。

stringprep.in_table_c7(code)

   判斷 *code* 是否在 tableC.7（不適用於規範表示法 (canonical
   representation)）中。

stringprep.in_table_c8(code)

   判斷 *code* 是否在 tableC.8（變更顯示屬性或已棄用）中。

stringprep.in_table_c9(code)

   判斷 *code* 是否在 tableC.9（標記字元 (tagging characters)）中。

stringprep.in_table_d1(code)

   判斷 *code* 是否在 tableD.1（具有雙向屬性 "R" 或 "AL" 的字元）中。

stringprep.in_table_d2(code)

   判斷 *code* 是否在 tableD.2（具有雙向屬性 "L" 的字元）中。
