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