- Unicode attribue un point de code unique à chaque caractère et synchronise son répertoire avec la norme ISO/IEC 10646.
- UTF-8, UTF-16 et UTF-32 codent les mêmes caractères et permettent une conversion sans perte.
- Les propriétés de normalisation, Bidi et UCD garantissent une comparaison, un ordre et un rendu cohérents.
- L’adoption d’Unicode (de préférence UTF-8 sur le Web) empêche la corruption et facilite l’internationalisation.
Unicode est le langage commun que les ordinateurs utilisent pour traiter les textes : il attribue un numéro unique à chaque caractère et symbole, issu de presque tous les systèmes d’écriture, afin qu’il puisse être stocké, traité et partagé de manière transparente entre les plateformes et les pays.
Cette norme a vu le jour pour surmonter les limitations des anciens jeux de caractères ( le jeu ASCII , les pages de codes, l'EBCDIC, etc.), qui étaient insuffisants ou incompatibles entre eux, et aujourd'hui elle est synchronisée avec l'ISO/IEC 10646, maintient des algorithmes (comme l'algorithme bidirectionnel) et définit des propriétés et des règles de normalisation afin que tout fonctionne de manière cohérente.
Qu’est-ce qu’Unicode et pourquoi est-il si important ?
Unicode est une norme d'encodage de caractères universelle et en constante évolution qui décrit chaque caractère par un nom, un point de code et un ensemble de propriétés (écriture, catégorie, directionnalité, casse, etc.). Le Comité technique Unicode (UTC), au sein du Consortium Unicode, assure sa mise à jour en conformité avec la norme ISO/CEI 10646.
Son objectif est l’universalité, l’uniformité et l’unicité : un vaste répertoire permettant l’échange sans ambiguïté de textes multilingues, selon des règles claires et reproductibles. Grâce à cela, les technologies modernes (systèmes d’exploitation, navigateurs, XML, Java, bases de données) peuvent intégrer dans un même document des alphabets latin et arabe, des idéogrammes CJK, des émojis et des symboles techniques ou musicaux.
Caractères, glyphes et points de code
En Unicode, un caractère est une unité d'information abstraite, et un point de code est son identifiant numérique . Un glyphe est la forme visuelle (ce que vous voyez à l'écran), qui dépend de la police . Un même caractère peut avoir plusieurs glyphes, et parfois un glyphe représente plusieurs caractères.
La notation habituelle pour un point de code est U+XXXX en hexadécimal . Exemples tirés du matériel analysé : le « l » minuscule est U+006C, le « ü » minuscule précomposé est U+00FC, le « é » est U+00E9 et le bêta grec : la majuscule est U+0392 et la minuscule U+03B2 (dans certains textes, « β » est cité avec U+0392, mais ce code correspond au « Β » majuscule).
L'espace de codage Unicode comporte 1 114 112 positions possibles (jusqu'à U+10FFFF) , organisées pour couvrir et classer tous les systèmes d'écriture et symboles, avec des dizaines de milliers d'affectations effectives et croissantes dans chaque version.
Plans, zones et blocs
Unicode divise son espace de caractères en 17 plans, chacun contenant jusqu'à 65 536 points de code . Cette organisation facilite le regroupement des écritures et des symboles apparentés et permet de trouver rapidement ce que l'on cherche.
Plans les plus pertinents : le plan multilingue de base (BMP, plan 0) rassemble la quasi-totalité des alphabets modernes et de nombreux symboles ; le plan multilingue supplémentaire (SMP, plan 1) stocke les écritures historiques et les symboles techniques (par exemple, musicaux et mathématiques) ; le plan idéographique supplémentaire (SIP, plan 2) étend les idéogrammes CJK ; le plan 14 (SSP) comprend des étiquettes spéciales ; et les plans 15 et 16 sont à usage privé.
Blocs et zones : les cartes sont subdivisées de manière informelle en zones et de manière formelle en blocs contigus. Les blocs servent à répertorier et à documenter les caractères, même s’ils ne correspondent pas toujours à des regroupements linguistiques pertinents.
Les idéogrammes CJK et le projet Unihan
Les idéogrammes d'Asie orientale (Han) sont unifiés dans Unicode, avec des variations stylistiques selon les régions , mais ils désignent tous le même caractère abstrait. Leur gestion est assurée par le Groupe des rapporteurs idéographiques (IRG), un groupe ISO/IEC JTC1/SC2/WG2 composé de représentants de la Chine, du Japon, de la Corée, du Vietnam, de Hong Kong, de Macao, de Singapour, des États-Unis et d'autres pays.
La base de données Unihan rassemble des informations auxiliaires (lectures, significations, équivalences) essentielles pour la gestion de ces idéogrammes dans différentes langues et normes historiques ou d'entreprise.
Principaux blocs CJK et extensions :
- Idéogrammes unifiés CJK (BMP, U+4E00–U+9FFF):20.992 XNUMX caractères couramment utilisés.
- Extension A (BMP, U+3400–U+4DBF): 6.592 XNUMX idéogrammes moins fréquents.
- Extensions B–H: dans SMP/SIP/TIP, ils s'élèvent à des dizaines de milliers de plus (B : U+20000–U+2A6DF, 42.720 2 ; C : U+700A2–U+73B4.154F, 2 740 ; D : U+2B81–U+222B2F, 820 ; E : U+2B5.762–U+2CEAF, 0 2 ; F : U+7.473CEB30000–U+3134EBEF, 4.939 31350 ; G : U+323–U+4.192F, XNUMX XNUMX ;
- Autres blocs CJK associés: Radicaux Kangxi (U+2F00–U+2FDF), Symboles et ponctuation CJK (U+3000–U+303F), Compatibilité et formats de compatibilité, Supplément d'idéogramme de compatibilité, etc.
Unicode prévoit que l'incorporation d'idéogrammes n'aura pas de fin absolue et envisage des mécanismes tels que les séquences de description idéographiques pour représenter les symboles non codés en les décomposant en composants existants (avec des mises en garde : sans décomposition canonique ni garanties dans des opérations telles que la recherche ou le classement).
Formes de codage : UTF-8, UTF-16 et UTF-32
Unicode définit des formes de transformation (UTF) qui convertissent les points de code en unités de stockage afin que les logiciels puissent traiter efficacement le texte en fonction de son contexte.
L'UTF-8 est un format d'encodage à longueur variable, orienté octet, compatible ASCII pour les caractères U+0000 à U+007F (un seul octet). La norme actuelle utilise de 1 à 4 octets par caractère ; certains textes anciens mentionnent de 1 à 6 octets, mais dans l'Unicode moderne, on utilise de 1 à 4 octets. C'est le format dominant sur le web.
L'UTF-16 utilise des unités de 16 bits
(une ou deux unités de code par caractère) : la plupart des caractères BMP tiennent dans une seule unité ; les caractères supplémentaires utilisent des paires de substitution dans la plage U+D800–U+DFFF.
L'UTF-32 est un format de longueur fixe : 4 octets par caractère, simple mais gourmand en espace ; utile lorsque l'indexation directe des caractères est importante et que la mémoire n'est pas un problème.
Comment les bits sont distribués en UTF-8
Le format UTF-8 répartit les bits de point de code en séquences de 1 à 4 octets avec des en-têtes reconnaissables, ce qui évite les ambiguïtés et facilite la détection des limites de caractères.
| Plage Unicode | Modèle de bits | Octets |
|---|---|---|
| U+0000..U+007F | 0xxxxxx | 1 |
| U+0080..U+07FF | 110yyyyy 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10yyyyyy 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx | 4 |
L'un des principaux avantages de l'UTF-8 est qu'il évite les problèmes d'ordre des octets (endianness) et permet un traitement très efficace des flux de texte, en plus d'être rétrocompatible avec l'ASCII.
Schémas de codage, endianness et BOM
Outre les formats UTF, Unicode décrit des schémas de sérialisation qui déterminent comment les octets sont transmis entre des systèmes ayant des ordres d'octets différents et comment des aspects tels que l'ordre des octets sont signalés.
- UTF-8: l'endianness ne s'applique pas. Cela peut être Marque d'ordre des octets (BOM) comme indice, bien que cela ne soit pas obligatoire ou recommandé par défaut.
- UTF-16: Variantes BE/LE (big/little-endian) et BOM facultatif (si manquant et non défini par le protocole, le big-endian est supposé).
- UTF-32:Variantes BE/LE avec règles analogues ; BOM autorisée comme marque de commande.
Il existe également des variantes spécifiques telles que UTF-16BE/UTF-16LE et UTF-32BE/UTF-32LE (sans BOM par convention), et d'autres encodages de compatibilité historiques tels que UTF-7 ou UTF-EBCDIC, en plus de GB18030 (équivalent chinois de UTF-8 avec prise en charge du chinois simplifié et traditionnel).
Normalisation, composition et équivalences
De nombreux caractères peuvent être représentés sous forme précomposée ou sous forme de séquences de base et de signes de liaison . Exemples classiques tirés du matériel révisé : le caractère précomposé « Ä » est représenté par U+00C4, tandis que sa forme décomposée est « A » (U+0041) + tréma (U+0308). Le caractère vietnamien « ỗ » peut être représenté par « o » (U+006F) + accent circonflexe (U+0302) + tilde (U+0303).
Unicode définit des formes normalisées et deux types d'équivalence : canonique (même contenu essentiel) et de compatibilité (formes qui peuvent sembler identiques mais présenter des différences sémantiques). La normalisation garantit une comparaison fiable des chaînes de caractères et réduit les doublons.
Algorithme bidirectionnel et caractères spéciaux
Pour les écritures de droite à gauche, comme l'arabe ou l'hébreu, Unicode intègre un algorithme bidirectionnel standardisé et évolutif (Bidi) (par exemple, les révisions de la version 6.3), afin que les textes mixtes avec du latin et de l'arabe soient représentés dans le bon ordre visuel.
Classes de points de code à connaître selon le matériel reçu : caractères graphiques (lettres, signes, symboles), formatage (caractères invisibles affectant le traitement : U+2028 saut de ligne, U+2029 saut de paragraphe, U+00A0 espace dur), codes de contrôle hérités pour la compatibilité (plages U+0000–U+001F, U+007F, U+0080–U+009F), usage privé, positions réservées, substituts (U+D800–U+DFFF pour UTF-16) et non-caractères (U+FFFE, U+FFFF dans chaque plan).
Unicode, ISO/IEC 10646 et autres normes (ASCII, ANSI, pages de codes)
Unicode est synchronisé avec la norme ISO/IEC 10646 (UCS) et conserve les correspondances avec les normes précédentes (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643, etc.), en plus de réserver des espaces pour un usage privé par les fabricants.
ASCII contre Unicode : L’ASCII est un jeu de caractères 7 bits comprenant 128 caractères , suffisant pour l’anglais de base, mais insuffisant pour les langues utilisant des signes diacritiques, des idéogrammes ou des émojis . L’Unicode couvre plus de 140 000 caractères et continue de s’enrichir, avec un encodage 8/16/32 bits selon le format UTF-12.
ANSI et pages de codes : « ANSI » désigne généralement les pages de codes Windows 8 bits, limitées et incompatibles entre elles. Un ordinateur exécutant OEM-Latin II et ouvrant un texte en IBM EBCDIC-Cyrillic affichera des caractères incorrects. Unicode résout ce problème grâce à un jeu de caractères unique et à des conversions sans perte entre ses propres formats.
Implémentation sur systèmes (Windows, Solaris) et conversion
Windows utilise en interne l'UTF-16 pour ses API modernes et propose des fonctionnalités telles que MultiByteToWideChar et WideCharToMultiByte pour la conversion entre Unicode et les pages de codes (SBCS/DBCS/MBCS). Si vous êtes contraint de convertir vers une page de codes, une perte de données peut survenir si celle-ci ne peut pas représenter tous les caractères.
Les nouvelles applications Windows devraient utiliser l'UTF-16 en interne et réserver la conversion aux périphériques (entrées/sorties, protocoles) afin de minimiser les risques de corruption. Windows assure néanmoins la compatibilité avec les pages de codes lorsque cela est inévitable.
Selon la documentation révisée, Oracle Solaris 11 prend en charge Unicode 6.0 et ISO/IEC 10646:2011 au niveau système, en utilisant UTF-8 comme format par défaut dans ses ensembles de paramètres, ce qui évite les problèmes d'ordre des octets et préserve de manière transparente l'ASCII.
Unicode en pratique : Web, documents et programmation
Sur le web, il est courant de servir et de stocker du contenu en UTF-8 . En HTML, déclarez '<meta charset="UTF-8">' pour assurer la compatibilité et utilisez des entités numériques hexadécimales lorsque cela est nécessaire (exemple : l'euro '€').
Dans Word, vous pouvez facilement insérer des symboles Unicode en plaçant le curseur, puis en cliquant sur Insertion > Symbole, ou en saisissant le code et en appuyant sur Alt+X ; la valeur est alors convertie en son caractère, selon la procédure standard. Consultez également la liste des codes Alt pour insérer des symboles au clavier.
En programmation : en Python 3, les chaînes de caractères sont déjà en Unicode ; en Java et C#, on peut utiliser les caractères d’échappement '\uXXXX' ; en HTML, '&#xXXXX;'. L’important est que l’édition, la compilation et la transmission utilisent le même encodage pour éviter les erreurs.
Le copier-coller de symboles fonctionne si la chaîne entière est en Unicode . Si certaines parties utilisent un encodage différent, des points d'interrogation, des carrés ou d'autres symboles étranges peuvent apparaître.
Base de données de caractères (UCD), propriétés et catégories
La base de données de caractères Unicode (UCD) publie, pour chaque point de code, son nom, sa catégorie, son système d'écriture, ses propriétés de casse, sa directionnalité et d'autres caractéristiques . Ces informations sont essentielles au bon fonctionnement des moteurs de rendu et du traitement de texte.
Grâce à ces propriétés , différents composants et algorithmes (tels que le tri, la segmentation des mots ou la transformation majuscules/minuscules) peuvent se comporter de manière cohérente avec les mêmes données.
Versions et extensions de la norme : points forts
Unicode s'enrichit à chaque version , intégrant de nouveaux caractères, symboles et émojis. Parmi les étapes clés, citons la version 1.0 en 1991 avec ses 7 161 caractères, et les extensions ultérieures qui ont ajouté des milliers de nouveaux symboles, idéogrammes, émojis et caractères.
Par exemple, en 2022 , la version 15.0 a ajouté 4 192 idéogrammes CJK supplémentaires et d'autres éléments, atteignant environ 149 186 caractères.
Outils pour explorer la table Unicode
Il existe des utilitaires gratuits pour la recherche et l'analyse de caractères : Unibook Character Browser, SYMBL et Branah.com permettent d'interroger les propriétés, les noms et les blocs de caractères, facilitant ainsi la recherche d'informations pour les développeurs et les créateurs de contenu.
Cas d'utilisation : formulaires d'adresse, internationalisation et affaires
Permettre aux utilisateurs de saisir les adresses dans leur propre langue et avec leur propre système d'écriture contribue à réduire les erreurs et à améliorer l'expérience utilisateur. De plus, l'interopérabilité Unicode prévient les problèmes de conversion entre différents systèmes, garantissant ainsi l'intégrité du texte tout au long de la chaîne numérique.
C’est pourquoi Unicode est l’élément fondamental qui garantit que le texte reste définitif dans toute l’infrastructure numérique , des formulaires web aux systèmes de bases de données et aux documents imprimés, que vous utilisiez ou non le caractère « ñ », l’arabe, le chinois ou des émojis dans la même phrase.