stringprep --- 因特網(wǎng)字符串預(yù)備?

源代碼: Lib/stringprep.py


在標識因特網(wǎng)上的事物(例如主機名),經(jīng)常需要比較這些標識是否(相等)。 這種比較的具體執(zhí)行可能會取決于應(yīng)用域的不同,例如是否要區(qū)分大小寫等等。 有時也可能需要限制允許的標識為僅由“可打印”字符組成。

RFC 3454 定義了在因特網(wǎng)協(xié)議中 Unicode 字符串的“預(yù)備”過程。 在將字符串連線傳輸之前,它們會先使用預(yù)備過程進行處理,之后它們將具有特定的標準形式。 該 RFC 定義了一系列表格,它們可以被組合為選項配置。 每個配置必須定義所使用的表格,stringprep 過程的其他可選項也是配置的組成部分。 stringprep 配置的一個例子是 nameprep,它被用于國際化域名。

模塊 stringprep 僅公開了來自 RFC 3454 的表格。 由于這些如果表格如果表示為字典或列表將會非常龐大,該模塊在內(nèi)部使用 Unicode 字符數(shù)據(jù)庫。 該模塊本身的源代碼是使用 mkstringprep.py 工具生成的。

因此,這些表格以函數(shù)而非數(shù)據(jù)結(jié)構(gòu)的形式公開。 在 RFC 中有兩種表格:集合與映射。 對于集合,stringprep 提供了“特征函數(shù)”,即如果形參是集合的一部分則返回值為 True 的函數(shù)。 對于映射,它提供了映射函數(shù):它會根據(jù)給定的鍵返回所關(guān)聯(lián)的值。 以下是模塊中所有可用函數(shù)的列表。

stringprep.in_table_a1(code)?

確定 code 是否屬于 tableA.1 (Unicode 3.2 中的未分配碼位)。

stringprep.in_table_b1(code)?

確定 code 是否屬于 tableB.1 (通常映射為空值)。

stringprep.map_table_b2(code)?

返回 code 依據(jù) tableB.2 (配合 NFKC 使用的大小寫轉(zhuǎn)換映射) 所映射的值。

stringprep.map_table_b3(code)?

返回 code 依據(jù) tableB.3 (不附帶正規(guī)化的大小寫折疊映射) 所映射的值。

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 (不適用于規(guī)范表示)。

stringprep.in_table_c8(code)?

確定 code 是否屬于 tableC.8 (改變顯示屬性或已棄用)。

stringprep.in_table_c9(code)?

確定 code 是否屬于 tableC.9 (標記字符)。

stringprep.in_table_d1(code)?

確定 code 是否屬于 tableD.1 (帶有雙向?qū)傩?"R" 或 "AL" 的字符)。

stringprep.in_table_d2(code)?

確定 code 是否屬于 tableD.2 (帶有雙向?qū)傩?"L" 的字符)。