6.5. unicodedata — Base de données Unicode


Ce module donne accès à la base de données des caractères Unicode (Unicode Character Database ou UCD) qui définit les propriétés de tous les caractères Unicode. Les données contenues dans cette base de données sont compilées depuis l”*UCD* version 11.0.0.

Ce module utilise les noms et symboles définis dans l’annexe 44 du standard Unicode (Unicode Standard Annex), « Unicode Character Database ». Il définit les fonctions suivantes :

unicodedata.lookup(name)

Retrouver un caractère par nom. Si un caractère correspondant au nom passé en paramètre est trouvé, renvoyer ce caractère. S’il n’est pas trouvé, KeyError est levée.

Modifié dans la version 3.3: La gestion des alias [1] et des séquences nommées [2] a été ajouté.

unicodedata.name(chr[, default])

Renvoie le nom correspondant au caractère chr comme une chaîne de caractères. Si aucun nom est défini, default est renvoyé, ou, si ce dernier n’est pas renseigné ValueError est levée.

unicodedata.decimal(chr[, default])

Renvoie la valeur décimale correspondante au caractère chr comme un entier. Si aucune valeur de ce type n’est définie, default est renvoyé, ou, si ce dernier n’est pas renseigné, ValueError est levée.

unicodedata.digit(chr[, default])

Renvoie le chiffre correspondant au caractère chr comme un entier. Si aucune valeur de ce type n’est définie, default est renvoyé, ou, si ce dernier n’est pas renseigné, ValueError est levée.

unicodedata.numeric(chr[, default])

Renvoie la valeur numérique correspondante au caractère chr comme un entier. Si aucune valeur de ce type n’est définie, default est renvoyé, ou, si ce dernier n’est pas renseigné, ValueError est levée.

unicodedata.category(chr)

Renvoie la catégorie générale correspondante au caractère chr comme une chaîne de caractères.

unicodedata.bidirectional(chr)

Renvoie la classe bidirectionnelle correspondante au caractère chr comme une chaîne de caractères. Si aucune valeur de ce type n’est définie, une chaîne de caractères vide est renvoyée.

unicodedata.combining(chr)

Renvoie la classe de combinaison canonique correspondante au caractère chr comme un entier. Envoie 0 si aucune classe de combinaison n’est définie.

unicodedata.east_asian_width(chr)

Renvoie la largeur est-asiatique correspondante à un caractère chr comme une chaîne de caractères.

unicodedata.mirrored(chr)

Renvoie la propriété miroir correspondante au caractère chr comme un entier. Renvoie 1 si le caractère a été identifié comme un caractère « réfléchi » dans du texte bidirectionnel, sinon 0.

unicodedata.decomposition(chr)

Renvoie le tableau associatif de décomposition de caractère correspondant au caractère chr comme une chaîne de caractères. Une chaîne de caractère vide est renvoyée dans le cas où aucun tableau associatif de ce type n’est défini.

unicodedata.normalize(form, unistr)

Renvoie la forme normale form de la chaîne de caractère Unicode unistr. Les valeurs valides de form sont “NFC”, “NFKC”, “NFD”, et “NFKD”.

Le standard Unicode définit les différentes variantes de normalisation d’une chaîne de caractères Unicode en se basant sur les définitions d’équivalence canonique et d’équivalence de compatibilité. En Unicode, plusieurs caractères peuvent être exprimés de différentes façons. Par exemple, le caractère U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) peut aussi être exprimé comme la séquence U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA).

Pour chaque caractère, il existe deux formes normales: la forme normale C et la forme normale D. La forme normale D (NFD) est aussi appelée décomposition canonique, et traduit chaque caractère dans sa forme décomposée. La forme normale C (NFC) applique d’abord la décomposition canonique, puis compose à nouveau les caractères pré-combinés.

En plus de ces deux formes, il existe deux formes nominales basées sur l’équivalence de compatibilité. En Unicode, certains caractères sont gérés alors qu’ils sont normalement unifiés avec d’autres caractères. Par exemple, U+2160 (ROMAN NUMERAL ONE) est vraiment la même chose que U+0049 (LATIN CAPITAL LETTER I). Cependant, ce caractère est supporté par souci de compatibilité avec les jeux de caractères existants (par exemple gb2312).

La forme normale KD (NFKD) applique la décomposition de compatibilité, c’est-à-dire remplacer les caractères de compatibilités avec leurs équivalents. La forme normale KC (NFKC) applique d’abord la décomposition de compatibilité, puis applique la composition canonique.

Même si deux chaînes de caractères Unicode sont normalisées et ont la même apparence pour un lecteur humain , si un a des caractères combinés alors que l’autre n’en a pas, elles peuvent ne pas être égales lors d’une comparaison.

De plus, ce module expose la constante suivante:

unicodedata.unidata_version

La version de la base de données Unicode utilisée dans ce module.

unicodedata.ucd_3_2_0

Ceci est un objet qui a les mêmes méthodes que le module, mais qui utilise la version 3.2 de la base de données Unicode, pour les applications qui nécessitent cette version spécifique de la base de données Unicode (comme l’IDNA).

Exemples :

>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'
>>> unicodedata.name('/')
'SOLIDUS'
>>> unicodedata.decimal('9')
9
>>> unicodedata.decimal('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'

Notes

[1]http://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt
[2]http://www.unicode.org/Public/11.0.0/ucd/NamedSequences.txt