# `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.

El modulo `stringprep` solo expone las tablas de RFC 3454. Como estas tablas serían muy grandes para representarlas como diccionarios o listas, el módulo usa la base de datos de los caracteres de Unicode de manera interna. El código fuente del módulo en sí ha sido generado usando la herramienta `mkstringprep.py`.

Como resultado, estas tablas son presentadas como funciones, no como estructuras de datos. Hay dos tipos de tablas en el RFC: conjuntos y mapeos. Para un conjunto, `stringprep` proporciona una «función característica», es decir, la función retorna `True` si el parámetro es parte del conjunto. Para los mapas, proporciona una función de mapeado: dada una clave, retorna el valor asociado. Abajo se encuentra una lista con todas las funciones disponibles para este módulo.

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»).