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* 是否在 tableC.9(标记字符)中。

stringprep.in_table_d1(code)

确定 *code* 是否在 tableD.1(具有双向属性“R”或“AL”的字符)中。

stringprep.in_table_d2(code)

确定 *code* 是否在 tableD.2(具有双向属性“L”的字符)中。