# Équivalence 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 diacritique tilde ◌̃ est canoniquement équivalent et donc compatible avec le simple caractère Unicode ñ, tandis que la ligature typographique ff est seulement compatible (mais non canoniquement équivalente) 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, abrégées NFC, NFD, NFKC et NFKD, qui seront détaillées ci-dessous et qui sont aussi décrites dans normalisation Unicode.

## Les deux notions d'équivalence

L’équivalence canonique est une forme d’équivalence qui préserve visuellement et fonctionnellement les caractères équivalents. Ils ont un codage binaire différents mais représentent un texte identique.
L’équivalence de compatibilité correspond plutôt à une équivalence de texte ordinaire, et peut réunir des formes distinctes sémantiquement.

### Équivalence 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 équivalent à 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 diacritique 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é.

#### Exemple avec diacritique

Amélie en Unicode UTF16BE formes NFC et NFD :
| Caractère représenté | A | m | é | é | l | i | e |
| UTF16-BE NFC | 0041 | 006d | 00e9 | 00e9 | 006c | 0069 | 0065 |
| UTF16-BE NFD | 0041 | 006d | 0065 | 0301 | 006c | 0069 | 0065 |
| Caractère représenté | A | m | e | ◌́ | l | i | e |

### Équivalence de compatibilité

L’équivalence de compatibilité correspond plutôt à une équivalence de texte ordinaire, et peut réunir 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 produire 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 (ﬃ), 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éfinit (comme cela a été 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 dans l’article 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 soi(en)t en tête et suivi(s) 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é.

## Usage

Unicode permet d'écrire les lettres d'un même mot de différentes manières lorsqu'elles sont composées de diacritiques, sans que cette différence ne soit visible de l'utilisateur.
Certains logiciels ne recourent pas à la notion d'équivalence Unicode ; ils font l'hypothèse que cela ne se produit pas et effectuent leurs comparaisons de texte en se basant sur la comparaison des codes unités sous-jacents, différenciant ainsi des chaînes qui apparaissent identiques du point de vue de l'utilisateur. Ceci fonctionne bien sur des systèmes non hétérogènes qui ne sont pas connectés en réseaux. Toutefois, si ces logiciels sont confrontés à des textes NFC et NFD, ils peuvent les considérer comme différents de manière incompréhensible pour l'utilisateur.
D'autres logiciels respectent le principe d'équivalence canonique Unicode. Par exemple, avec le logiciel MediaWiki utilisé par Wikipédia, les deux textes « Identité » (avec le caractère é) et « Identité » (avec les caractères e + ◌́ ) sont équivalents lorsqu’utilisés dans les liens (Identité et Identité) et pointent sur la même page, alors que l'un est en NFC et l'autre en NFD, les deux sont normalisés en NFC pour l’équivalence.
Certains moteurs de recherche respectent aussi le principe d’équivalence Unicode et retournent les mêmes résultats peu importe si la requête n’est pas normalisée dans une forme ou une autre par l’utilisateur, elle l’est automatiquement par le logiciel.
Dans certains navigateurs Web, la recherche de texte sur une page tient compte en tout ou partie de l’équivalence Unicode, ou d’autres formes d’équivalence. C’est notamment le cas de Google Chrome ou Safari ainsi que d’Internet Explorer pour certaines équivalences. Des navigateurs comme Firefox et Opera ne sont pas dotés de cette fonctionnalité.