7.10. stringprep-Internet 字符串准备

2.3 版的新Function。

在标识 Internet 中的事物(例如主机名)时,通常需要将此类标识进行“平等”比较。究竟如何执行该比较可能取决于应用程序域,例如是否应该不区分大小写。也可能有必要限制可能的标识,以仅允许包含“可打印”字符的标识。

RFC 3454定义了在 Internet 协议中“准备” Unicode 字符串的过程。在将绳子传递到电线上之前,先按照准备程序对其进行处理,然后再将它们制成某种规格的形式。 RFC 定义了一组表,可以将它们组合成配置文件。每个概要文件都必须定义其使用的表以及stringprep过程的哪些其他可选部分是该概要文件的一部分。 stringprep配置文件的一个示例是nameprep,它用于国际化域名。

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

结果,这些表作为函数而不是数据结构公开。 RFC 中有两种表:集和 Map。对于集合,stringprep提供“Feature 函数”,即,如果参数是集合的一部分,则返回 true 的函数。对于 Map,它提供了 Map Function:给定键,它返回关联的值。以下是模块中所有可用Function的列表。

  • stringprep. in_table_a1(* code *)

    • 确定* code *是否在 tableA.1 中(Unicode 3.2 中的未分配代码点)。
  • stringprep. in_table_b1(* code *)

    • 确定* code *是否在 tableB.1 中(CommonMap 为空)。
  • stringprep. map_table_b2(* code *)

    • 根据表 B.2(用于 NFKC 的大小写折叠 Map)返回* code *的 Map 值。
  • stringprep. map_table_b3(* code *)

    • 根据表 B.3 返回* code *的 Map 值(Map 用于不使用规范化的大小写折叠)。
  • 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 *是否在 tableC.3(专用)中。
  • stringprep. in_table_c4(* code *)

    • 确定* code *是否在表 C.4 中(非字符代码点)。
  • stringprep. in_table_c5(* code *)

    • 确定* code *是否在表 C.5(代理代码)中。
  • stringprep. in_table_c6(* code *)

    • 确定* code *是否在 tableC.6 中(不适用于纯文本)。
  • stringprep. in_table_c7(* code *)

    • 确定* code *是否在 tableC.7 中(不适用于规范表示)。
  • stringprep. in_table_c8(* code *)

    • 确定* code *是否在 tableC.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”的字符)。