stringprep – 网络字符串准备(15) – Python语言(必读进阶学习教程)(参考资料)
在互联网上识别事物(例如主机名)时,通常需要比较这些识别是否“平等”。究竟如何执行这种比较可能取决于应用程序域,例如它是否应该不区分大小写。可能还需要限制可能的标识,只允许由“可打印”字符组成的标识。
RFC 3454定义了在互联网协议中“准备”Unicode 字符串的过程。在将字符串传递到电线上之前,它们会通过准备程序进行处理,之后它们具有一定的规范化形式。RFC 定义了一组表,这些表可以组合成配置文件。每个概要文件必须定义它使用哪些表,以及stringprep
过程的哪些其他可选部分是概要文件的一部分。stringprep
配置文件的 一个示例nameprep
,用于国际化域名。
该模块stringprep
仅公开表RFC 3454。由于这些表非常大,无法将它们表示为字典或列表,因此该模块在内部使用 Unicode 字符数据库。模块源代码本身是使用该mkstringprep.py
实用程序生成的。
结果,这些表被公开为函数,而不是数据结构。RFC 中有两种表:集合和映射。对于集合, stringprep
提供“特征函数”,即True
如果参数是集合的一部分则返回的函数。对于映射,它提供映射功能:给定键,它返回关联的值。下面是模块中所有可用功能的列表。
stringprep.
codein_table_a1(
)
- 确定代码是否在表 A.1 中(Unicode 3.2 中未分配的代码点)。
stringprep.
codein_table_b1(
)
- 确定代码是否在表 B.1 中(通常映射为空)。
stringprep.
codemap_table_b2(
)
- 根据表 B.2(与 NFKC 一起使用的大小写折叠映射)返回代码的映射值。
stringprep.
codemap_table_b3(
)
- 根据表 B.3 返回代码的映射值(映射用于不进行规范化的大小写折叠)。
stringprep.
codein_table_c11(
)
- 确定代码是否在 tableC.1.1 中(ASCII 空格字符)。
stringprep.
codein_table_c12(
)
- 确定代码是否在 tableC.1.2 中(非 ASCII 空格字符)。
stringprep.
codein_table_c11_c12(
)
- 确定代码是否在 tableC.1 中(空格字符,C.1.1 和 C.1.2 的并集)。
stringprep.
codein_table_c21(
)
- 确定代码是否在 tableC.2.1(ASCII 控制字符)中。
stringprep.
codein_table_c22(
)
- 确定代码是否在 tableC.2.2(非 ASCII 控制字符)中。
stringprep.
codein_table_c21_c22(
)
- 判断代码是否在tableC.2中(控制字符,C.2.1和C.2.2的并集)。
stringprep.
codein_table_c3(
)
- 确定代码是否在 tableC.3 中(私人使用)。
stringprep.
codein_table_c4(
)
- 确定代码是否在表 C.4(非字符代码点)中。
stringprep.
codein_table_c5(
)
- 确定代码是否在表 C.5(代理代码)中。
stringprep.
codein_table_c6(
)
- 确定代码是否在 tableC.6 中(不适合纯文本)。
stringprep.
codein_table_c7(
)
- 确定代码是否在表 C.7 中(不适合规范表示)。
stringprep.
codein_table_c8(
)
- 确定代码是否在 tableC.8 中(更改显示属性或已弃用)。
stringprep.
codein_table_c9(
)
- 确定代码是否在 tableC.9(标记字符)中。
stringprep.
codein_table_d1(
)
- 确定代码是否在表 D.1 中(具有双向属性“R”或“AL”的字符)。
stringprep.
codein_table_d2(
)
- 确定代码是否在表 D.2 中(具有双向属性“L”的字符)。