6.6. stringprep — Préparation des chaines de caractères internet

Code source : Lib/stringprep.py


Nommer les différentes choses d’internet (comme les hôtes) amène souvent au besoin de comparer ces identifiants, ce qui nécessite un critère d”« égalité ». La manière dont cette comparaison est effectuée dépend du domaine d’application, c’est-à-dire si elle doit être sensible à la casse ou non. Il peut être aussi nécessaire de restreindre les identifiants possibles, pour permettre uniquement les identifiants composés de caractères « imprimables ».

La RFC 3454 définit une procédure pour « préparer » des chaines de caractères Unicode dans les protocoles internet. Avant de passer des chaines de caractères sur le câble, elles sont traitées avec la procédure de préparation, après laquelle ils obtiennent une certaines forme normalisée. Les RFC définissent un lot de tables, qui peuvent être combinées en profils. Chaque profil doit définir quelles tables il utilise et quelles autres parties optionnelles de la procédure stringprep font partie du profil. Un exemple de profil stringprep est nameprep, qui est utilisé pour les noms de domaine internationalisés.

Le module stringprep expose uniquement les tables de la RFC 3454. Comme ces tables seraient très grandes à représenter en tant que dictionnaires ou listes, le module utilise, en interne, la base de données des caractères Unicode. Le code source du module, lui-même, a été généré en utilisant l’utilitaire mkstringprep.py.

En conséquence, ces tables sont exposées en tant que fonctions et non en structures de données. Il y a deux types de tables dans la RFC : les ensemble et les mises en correspondance. Pour un ensemble, stringprep fournit la « fonction caractéristique », c’est-à-dire une fonction qui renvoie vrai si le paramètre fait partie de l’ensemble. Pour les mises en correspondance, il fournit la fonction de mise en correspondance : ayant obtenu la clé, il renvoie la valeur associée. Ci-dessous se trouve une liste de toutes les fonctions disponibles dans le module.

stringprep.in_table_a1(code)

Détermine si le code est en table A.1 (points de code non-assigné dans Unicode 3.2).

stringprep.in_table_b1(code)

Détermine si le code est en table B.1 (habituellement mis en correspondance avec rien).

stringprep.map_table_b2(code)

Renvoie la valeur correspondante à code selon la table B.2 (mise en correspondance pour la gestion de la casse utilisée avec NFKC).

stringprep.map_table_b3(code)

Renvoie la valeur correspondante à code dans la table B.3 (mise en correspondance pour la gestion de la casse utilisée sans normalisation).

stringprep.in_table_c11(code)

Détermine si le code est dans la table C.1.1 (caractères d’espacement ASCII).

stringprep.in_table_c12(code)

Détermine si le code est dans la table C.1.2 (caractères d’espacement non ASCII).

stringprep.in_table_c11_c12(code)

Détermine si le code est dans la table C.1 (caractères d’espacement, union de C.1.1 et C.1.2).

stringprep.in_table_c21(code)

Détermine si le code est dans la table C.2.1 (caractères de contrôle ASCII).

stringprep.in_table_c22(code)

Détermine si le code est en table C.2.2 (caractères de contrôle non ASCII).

stringprep.in_table_c21_c22(code)

Détermine si le code est dans la table C.2 (caractères de contrôle, union de C.2.1 et C.2.2).

stringprep.in_table_c3(code)

Détermine si le code est en table C.3 (usage privé).

stringprep.in_table_c4(code)

Détermine si le code est dans la table C.4 (points de code non-caractère).

stringprep.in_table_c5(code)

Détermine si le code est en table C.5 (codes substituts).

stringprep.in_table_c6(code)

Détermine si le code est dans la table C.6 (Inapproprié pour texte brut).

stringprep.in_table_c7(code)

Détermine si le code est dans la table C.7 (inapproprié pour les représentations canonics1).

stringprep.in_table_c8(code)

Détermine si le code est dans la table C.8 (change de propriétés d’affichage ou sont obsolètes).

stringprep.in_table_c9(code)

Détermine si le code est dans la table C.9 (caractères de marquage).

stringprep.in_table_d1(code)

Détermine si le code est en table D.1 (caractères avec propriété bidirectionnelle « R » ou « AL »).

stringprep.in_table_d2(code)

Détermine si le code est dans la table D.2 (caractères avec propriété bidirectionnelle « L »).