stringprep — 網際網路字串準備

原始碼: Lib/stringprep.py


在網際網路中識別事物(例如主機名)時,通常需要比較這些標識以確定“相等性”。這種比較的具體執行方式可能取決於應用程式領域,例如它是否應區分大小寫。還可能需要限制可能的標識,只允許由“可列印”字元組成的標識。

RFC 3454 定義了一個在網際網路協議中“準備”Unicode字串的程式。在將字串傳送到網路之前,它們會經過準備程式處理,之後它們會具有某種標準化形式。該 RFC 定義了一組表,這些表可以組合成配置檔案。每個配置檔案必須定義它使用哪些表,以及 stringprep 程式的哪些可選部分是該配置檔案的一部分。一個 stringprep 配置檔案的例子是 nameprep,它用於國際化域名。

模組 stringprep 只暴露了 RFC 3454 中的表。由於這些表如果用字典或列表表示會非常大,因此該模組內部使用了 Unicode 字元資料庫。模組原始碼本身是使用 mkstringprep.py 實用程式生成的。

因此,這些表以函式而非資料結構的形式暴露。RFC 中有兩種表:集合和對映。對於集合,stringprep 提供了“特徵函式”,即一個函式,如果引數是集合的一部分,則返回 True。對於對映,它提供了對映函式:給定鍵,它返回關聯的值。下面是模組中所有可用函式的列表。

stringprep.in_table_a1(code)

確定 code 是否在表 A.1 中(Unicode 3.2 中未分配的程式碼點)。

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 中(非字元程式碼點)。

stringprep.in_table_c5(code)

確定 code 是否在表 C.5 中(代理程式碼)。

stringprep.in_table_c6(code)

確定 code 是否在表 C.6 中(不適用於純文字)。

stringprep.in_table_c7(code)

確定 code 是否在表 C.7 中(不適用於規範表示)。

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”的字元)。