stringprep ---互联网字符串准备

源代码: Lib/stringprep.py


在互联网上识别事物(如主机名)时,通常需要比较这些标识以实现“平等”。这种比较的具体执行方式可能取决于应用程序域,例如,它是否应该不区分大小写。可能还需要限制可能的标识,只允许包含“可打印”字符的标识。

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中(通常映射为Nothing)。

stringprep.map_table_b2(code)

返回的映射值 code 根据表B.2(与NFKC一起使用的案例折叠映射)。

stringprep.map_table_b3(code)

返回的映射值 code 根据表B.3(没有标准化的情况下使用的案例折叠映射)。

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