stringprep — Internet 字符串准备 — Python 文档

来自菜鸟教程
Python/docs/3.7/library/stringprep
跳转至:导航、​搜索

stringprep — 互联网字符串准备

源代码: :source:`Lib/stringprep.py`



在识别 Internet 中的事物(例如主机名)时,通常需要比较这些标识的“相等性”。 究竟如何执行此比较可能取决于应用程序域,例如 是否应该不区分大小写。 可能还需要限制可能的标识,以仅允许由“可打印”字符组成的标识。

RFC 3454 定义了在互联网协议中“准备”Unicode 字符串的过程。 在将字符串传递到电线上之前,它们会通过准备程序进行处理,之后它们具有某种规范化形式。 RFC 定义了一组表,可以组合成配置文件。 每个配置文件必须定义它使用哪些表,以及 stringprep 过程的哪些其他可选部分是配置文件的一部分。 stringprep 配置文件的一个示例是 nameprep,用于国际化域名。

模块 stringprep 仅公开来自 RFC 3454 的表。 由于这些表将非常大以将它们表示为字典或列表,因此该模块在内部使用 Unicode 字符数据库。 模块源代码本身是使用 mkstringprep.py 实用程序生成的。

因此,这些表公开为函数,而不是数据结构。 RFC 中有两种表:集合和映射。 对于一个集合,stringprep提供了“特征函数”,即 如果参数是集合的一部分,则返回 True 的函数。 对于映射,它提供了映射函数:给定键,它返回关联的值。 下面是模块中所有可用功能的列表。

stringprep.in_table_a1(code)
确定 code 是否在 tableA.1(Unicode 3.2 中未分配的代码点)中。
stringprep.in_table_b1(code)
判断code是否在tableB.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)
确定代码是否在表C.5(代理代码)中。
stringprep.in_table_c6(code)
判断code是否在表C.6中(不适合纯文本)。
stringprep.in_table_c7(code)
确定code是否在表C.7中(不适合规范表示)。
stringprep.in_table_c8(code)
确定 code 是否在 tableC.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”的字符)中。