# `stringprep` — Internet String Preparation

Código fuente: Lib/stringprep.py

Cuando se quiere identificar cosas (como nombres de host) en internet, generalmente es necesario comparar tales identificaciones para «igualdad». La manera en la que esta comparación se ejecuta dependerá del dominio de la aplicación, ej. si tiene o no tiene que distinguir entre mayúsculas y minúsculas. Además, en algunos casos será necesario restringir las posibles identificaciones, de tal manera que solo se permitan identificadores de caracteres que se puedan «imprimir».

RFC 3454 define el proceso para la «preparación» de cadenas Unicode para protocolos de internet. Antes de pasar cadenas a un cable, se procesan con el proceso de preparación, después del cual tienen una forma normalizada. El RFC define un conjunto de tablas, que pueden ser combinadas en perfiles. Cada perfil debe definir qué tablas usa, y que partes opcionales del proceso `stringprep` son parte del perfil. Un ejemplo de perfil de `stringprep` es `nameprep`, que se usa para nombres de dominios internacionalizados.

The module `stringprep` only exposes the tables from RFC 3454. As these tables would be very large to represent as dictionaries or lists, the module uses the Unicode character database internally. The module source code itself was generated using the `mkstringprep.py` utility.

As a result, these tables are exposed as functions, not as data structures. There are two kinds of tables in the RFC: sets and mappings. For a set, `stringprep` provides the «characteristic function», i.e. a function that returns `True` if the parameter is part of the set. For mappings, it provides the mapping function: given the key, it returns the associated value. Below is a list of all functions available in the module.

stringprep.in_table_a1(code)

  Determina si code está en la tablaA.1 (Puntos de Código sin asignar en Unicode 3.2).

stringprep.in_table_b1(code)

  Determina si code está en la tablaB.1 (Generalmente mapeado a nada).

stringprep.map_table_b2(code)

  Retorna el valor mapeado para code de acuerdo a la tablaB.2 (Mapeo para case-folding usado con NFKC).

stringprep.map_table_b3(code)

  Retorna el valor mapeado para code de acuerdo a tablaB.3 (Mapeo para case-folding usado sin normalización).

stringprep.in_table_c11(code)

  Determina si code está en la tablaC.1.1 (Caracteres de espacio ASCII).

stringprep.in_table_c12(code)

  Determina si code está en la tablaC.1.2 (Caracteres de espacio no-ASCII).

stringprep.in_table_c11_c12(code)

  Determina si code está en la tablaC.1 (Caracteres de espacio, unión de C.1.1 y C.1.2).

stringprep.in_table_c21(code)

  Determina si code está en la tablaC.2.1 (Caracteres de control ASCII).

stringprep.in_table_c22(code)

  Determina si code está en la tablaC.2.2 (Caracteres de control no ASCII).

stringprep.in_table_c21_c22(code)

  Determina si code está en la tablaC.2 (Caracteres de control, unión de C.2.1 y C.2.2).

stringprep.in_table_c3(code)

  Determina si code está en la tablaC.3 (Uso privado).

stringprep.in_table_c4(code)

  Determina si code está en la tablaC.4 (Puntos de código sin caracteres)

stringprep.in_table_c5(code)

  Determina si code está en la tablaC.5 (Códigos surrogados).

stringprep.in_table_c6(code)

  Determina si code está en la tablaC.6 (Inadecuado para texto plano).

stringprep.in_table_c7(code)

  Determina si code está en la tablaC.7 (Inadecuado para la representación canónica).

stringprep.in_table_c8(code)

  Determina si code está en la tablaC.8 (Cambia las propiedades de apariencia o están obsoletas).

stringprep.in_table_c9(code)

  Determina si code está en la tablaC.9 (Caracteres de etiquetado).

stringprep.in_table_d1(code)

  Determina si code está en la tablaD.1 (Caracteres con propiedad bidireccional «R» o «AL»).

stringprep.in_table_d2(code)

  Determina si code está en la tablaD.2 (Caracteres con propiedad bidireccional «L»).