- Equivalences unicode
-
Équivalences unicode
Cet article traite des équivalences unicode. Unicode contient de nombreux caractères. Pour maintenir la compatibilité avec des standards existants, certains d’entre eux sont équivalents à d’autres caractères ou à des séquences de caractères. Unicode fournit deux notions d’équivalence : canonique et de compatibilité, la première étant un sous-ensemble de la deuxième. Par exemple, le caractère n suivi du tilde ~ est canoniquement équivalent et donc compatible au simple caractère Unicode ñ, tandis que la ligature typographique ff est seulement compatible avec la séquence de deux caractères f.
La normalisation Unicode est une normalisation de texte qui transforme des caractères ou séquences de caractères en une même représentation équivalente, appelée « forme normale » dans cet article. Cette transformation est importante, car elle permet de faire des comparaisons, recherches et tris de séquences Unicode. Pour chacune des deux notions d’équivalence, Unicode définit deux formes, l’une composée, et l’autre décomposée, conduisant à quatre formes normales, abbrégées NFC, NFD, NFKC et NFKD, qui seront détaillées ci-dessous et qui sont aussi décrites dans Normalisation Unicode.
Sommaire
Les deux notions d'équivalence
Equivalence canonique
L’équivalence canonique est une forme d’équivalence qui préserve visuellement et fonctionnellement les caractères équivalents. Par exemple le caractère ü est canoniquement équivalente à la séquence u suivi de ¨. De manière similaire, Unicode identifie plusieurs diacritiques grecs avec des signes de ponctuation qui ont la même apparence.
Sous-jacent à ce concept d’équivalence canonique d’Unicode il y a donc les deux notions, réciproques l’une de l’autre, de composition et de décomposition de caractères. La composition de caractères consiste à combiner plusieurs caractères simples en un seul caractère sous une forme dite précomposée, tel que le caractère n qui combiné avec le tilde ~ donnent le caractère ñ. La décomposition est le processus réciproque, consistant à retrouver les caractères élémentaires à partir d’un caractère composé.
Equivalence de compatibilité
L’équivalence de compatibilité correspond plutôt à une équivalence de texte ordinaire, et peut réunir ensemble des formes distinctes sémantiquement. Comme son nom l’indique elle permet essentiellement de maintenir une compatibilité avec des jeux de caractères incomplets.
Par exemple, des chiffres en indice ou en exposant sont équivalents (par compatibilité) aux chiffres qui les constituent. Ils ne leur sont pas canoniquement équivalents, puisque le sens en est différent. Mais la conversion vers un jeu de caractères ne comprenant pas ces indices ou exposants permettra de conserver partiellement leur signification.
Par exemple la transformation a² → a2 permettra que ce groupe de deux caractères puisse être encore compris comme le carré de a, surtout avec l’aide du contexte.
Les indices et les exposants peuvent être considérés de façon bien plus commode en utilisant des formats Unicode enrichis.
Les caractères katakana de pleine chasse ou demi-chasse sont aussi équivalents (par compatibilité) sans être canoniquement équivalents. Il en est de même pour les ligatures et leurs composants. Pour ce dernier exemple, il y a en général une distinction visuelle plutôt qu’une distinction sémantique. Autrement dit ligatures et non-ligatures ont dans ce cas le même sens, mais apparaissent comme des choix de design différents.
Normalisation Unicode
L’implémentation de recherches, comparaisons et tris de chaînes de caractères Unicode dans des logiciels de traitement de texte doit prendre en compte la présence d’écritures équivalentes. Dans le cas contraire, les utilisateurs risquent d’échouer dans leur recherche (comparaison, tri) à cause de caractères équivalents (et donc apparaissant comme un même glyphe), mais représentés de façon interne par des séquences différentes de codes.
Unicode fournit des algorithmes standard de normalisation qui doivent produirent une même séquence de codes pour toutes séquences équivalentes. Le critère d’équivalence peut-être canonique (NF) ou compatible (NFK). Et pour chacun de ces deux critères, Unicode fournit deux formes normales : la forme (pré)composée NFC ou NFKC et la forme décomposée NFD ou NFKD. En outre ces deux formes imposent un « ordre canonique » sur la séquence de codes, afin qu’il y ait bien unicité.
Pour les recherches ou comparaisons ou tris, les logiciels peuvent utiliser la forme composée ou la forme décomposée. Le choix n’a aucune importance, pourvu que ce soit le même pour toutes les chaînes de caractères concernées dans une recherche, comparaison, etc.
Par contre, le choix du critère d’équivalence peut affecter le résultat de la recherche.
Par exemple certaines ligatures comme U+FB03 (ffi), ou certains chiffres romains comme U+2168 (Ⅸ) ou encore des indices ou exposants tels que U+2075 (⁵) ont leurs propres codes Unicode. La normalisation canonique (NF) ne les modifiera pas, mais la normalisation de compatibilité (NFK) décomposera la ligature ffi en ses composants, et ainsi une recherche de U+0066 (f) réussira dans NFKC(U+FB03) mais pas dans NFC(U+FB03). On aura bien sûr un comportement analogue pour la recherche de U+0049 (I) dans U+2168. Enfin l’exposant U+2075 (⁵) est transformé en U+0035 (5) par normalisation de compatibilité donc peut être trouvé lors d’une recherche du simple chiffre 5.
Formes normales
Unicode définie (comme nous l’avons vu dans la section précédente) quatre formes normales. Ces quatre formes imposent un ordre canonique pour les séquences résultantes afin d’en garantir l’unicité. Les algorithmes associés sont tous idempotents, mais aucun n’est injectif à cause des singletons.
Les singletons sont des caractères qui sont uniques mais équivalents (pour compatibilité) à d’autres caractères de même glyphe. Par exemple le caractère Ω (ohm) est équivalent au caractère Ω (omega) : c’est un singleton.
Les quatre formes sont NFC, NFD, NFKC et NFKD. Des détails et exemples en sont donnés ici : normalisation Unicode
Ordre canonique
L’ordre canonique concerne essentiellement les caractères sous forme décomposée en séquence de caractères simples. Il est d’abord impératif que le(s) caractère(s) de base soient en tête et suivi des caractères modifiants (diacritiques en général mais ce n’est pas une obligation).
Ensuite, s’il y a plusieurs caractères modifiants, des règles devront être suivies également pour que l’ordre en soit unique pour un caractère décomposé donné.
Voir aussi
- Unicode
- ligature typographique
- Diacritique
- Caractère précomposé
Références
Liens externes
Catégorie : Unicode
Wikimedia Foundation. 2010.