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

源代碼: Lib/stringprep.py


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

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

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

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

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 依據 tableB.2 (配合 NFKC 使用的大小寫(xiě)轉換映射) 所映射的值。

stringprep.map_table_b3(code)?

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

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

stringprep.in_table_c8(code)?

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

stringprep.in_table_c9(code)?

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

stringprep.in_table_d1(code)?

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

stringprep.in_table_d2(code)?

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