Maison >développement back-end >Tutoriel Python >Comment le module « unicodedata » de Python peut-il normaliser les chaînes Unicode pour une manipulation cohérente ?
Normalisation d'Unicode
Le module unicodedata de Python fournit des méthodes pour manipuler les chaînes Unicode. Une tâche courante consiste à normaliser une chaîne afin qu'elle utilise la représentation la plus simple possible, en éliminant les entités Unicode en double.
Problème
Considérez l'exemple suivant :
import unicodedata char = "á" len(char) [unicodedata.name(c) for c in char]
Le résultat montre que la chaîne "á" est normalisée à sa forme la plus simple : "LETTRE MINUSCULE LATINE A AVEC AIGU". Cependant, si l'on inverse l'ordre des caractères :
char = "á" len(char) [unicodedata.name(c) for c in char]
Le résultat se décompose en deux caractères distincts : « LETTRE MINUSCULE LATINE A » et « ACCENT AIGU COMBINANT ». Ce comportement est incohérent et peut compliquer la manipulation des chaînes.
Solution
Pour normaliser une chaîne Unicode de manière cohérente, utilisez la fonction .normalize() du module unicodedata. Le formulaire NFC (Normal Form Composed) renvoie des caractères composés, tandis que le formulaire NFD (Normal Form Decomposed) vous donne des caractères décomposés et combinés.
Par exemple, en utilisant la même combinaison Unicode ci-dessus :
print(ascii(unicodedata.normalize('NFC', '\u0061\u0301'))) print(ascii(unicodedata.normalize('NFD', '\u00e1')))
Le résultat montre que le formulaire NFC produit le caractère composé "é", tandis que le formulaire NFD produit la séquence décomposée. "au0301".
Des formulaires supplémentaires, NFKC et NFKD, traitent des points de code de compatibilité. Ces formes remplacent les caractères de compatibilité par leur forme canonique. Par exemple :
unicodedata.normalize('NFKC', '\u2167')
Transforme le point de code huit en chiffre romain (U 2167) en séquence ASCII "VIII".
Notez que toutes les transformations ne sont pas commutatives. Décomposer un caractère composé puis le recomposer peut ne pas aboutir à la séquence originale. La norme Unicode maintient une liste d'exceptions pour ce comportement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!