# 6.6. `stringprep` - Internet字符串准备

源代码： Lib / stringprep.py

当在互联网上识别事物（例如主机名）时，通常需要比较这些识别“平等”。确切地，如何执行该比较可以取决于应用域，例如。是否应该不区分大小写。还可能需要限制可能的标识，以仅允许由“可打印”字符组成的标识。

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

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

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

`stringprep.``in_table_a1`(code)

  确定代码是否在表A.1（Unicode 3.2中为未分配的代码点）中。

`stringprep.``in_table_b1`(code)

  确定代码是否在表B.1（通常映射为无）中。

`stringprep.``map_table_b2`(code)

  根据表B.2（映射用于NFKC的大小写折叠）返回代码的映射值。

`stringprep.``map_table_b3`(code)

  根据表B.3（用于没有归一化的情况下折叠的映射）返回代码的映射值。

`stringprep.``in_table_c11`(code)

  确定代码是否在表C.1.1（ASCII空格字符）中。

`stringprep.``in_table_c12`(code)

  确定代码是否在表C.1.2（非ASCII空格字符）中。

`stringprep.``in_table_c11_c12`(code)

  确定代码是否在表C1（空间字符，C.1.1和C.1.2的共用体）中。

`stringprep.``in_table_c21`(code)

  确定代码是否在表C.2.1（ASCII控制字符）中。

`stringprep.``in_table_c22`(code)

  确定代码是否在表C.2.2（非ASCII控制字符）中。

`stringprep.``in_table_c21_c22`(code)

  确定代码是否在表C.2（控制字符，C.2.1和C.2.2的共用体）中。

`stringprep.``in_table_c3`(code)

  确定代码是否在表C3（私人使用）中。

`stringprep.``in_table_c4`(code)

  确定代码是否在表C.4（非字符代码点）中。

`stringprep.``in_table_c5`(code)

  确定代码是否在表C5（代理代码）中。

`stringprep.``in_table_c6`(code)

  确定代码是否在表C.6中（不适用于纯文本）。

`stringprep.``in_table_c7`(code)

  确定代码是否在表C.7（不适用于规范表示）中。

`stringprep.``in_table_c8`(code)

  确定代码是否在表C.8（更改显示属性或已弃用）中。

`stringprep.``in_table_c9`(code)

  确定代码是否在表C.9（标记字符）中。

`stringprep.``in_table_d1`(code)

  确定代码是否在表D.1（具有双向属性“R”或“AL”的字符）中。

`stringprep.``in_table_d2`(code)

  确定代码是否在表D.2（具有双向属性“L”的字符）中。