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