stringprep
— Internet 字串準備¶
原始碼: Lib/stringprep.py
在 Internet 中標識事物(如主機名)時,通常需要比較這些標識的“相等性”。這種比較的確切執行方式可能取決於應用領域,例如,它是否應該不區分大小寫。可能還需要限制可能的標識,只允許由“可列印”字元組成的標識。
RFC 3454 定義了 Internet 協議中“準備” 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”的字元)。