Encodages de caractères et Unicode : le guide ultime de UTF-8, UTF-16 et au-delà
Aux premiers jours de l'informatique, représenter du texte était simple : chaque caractère tenait sur 7 ou 8 bits (ASCII). Mais à mesure que l'informatique se mondialisait, nous avons eu besoin d'un moyen de représenter chaque caractère de chaque langue du monde. Voici l'histoire d'Unicode et des encodages qui l'alimentent.
1. Le standard Unicode
Unicode n'est pas un encodage en soi, mais un jeu de caractères universel. Il attribue un numéro unique, appelé point de code, à chaque caractère (ex : U+0041 pour 'A'). Cependant, nous avons toujours besoin d'un moyen de stocker ces numéros en binaire.
UTF-8 (Le roi du Web)
UTF-8 est un encodage à largeur variable qui utilise de 1 à 4 octets par caractère. Il est rétrocompatible avec ASCII.
- Avantages : Efficace pour les langues occidentales, robuste contre la corruption de données, et le standard universel pour le web.
UTF-16
Utilise soit 2, soit 4 octets. C'est l'encodage natif de Windows (NTFS) et de nombreux environnements de programmation comme Java et JavaScript.
UTF-32
Utilise exactement 4 octets pour chaque caractère. Bien que simple pour l'indexation, il est très peu efficace en termes de mémoire.
2. Encodages hérités et régionaux
Avant qu'Unicode ne devienne dominant, différentes régions utilisaient leurs propres standards, dont beaucoup sont encore rencontrés aujourd'hui.
Encodages chinois (Famille GB)
- GB2312 : Le premier standard pour le chinois simplifié.
- GBK : Une extension de GB2312 pour supporter plus de caractères.
- GB18030 : Le standard obligatoire actuel en Chine, supportant à la fois le chinois simplifié et traditionnel et correspondant entièrement à Unicode.
Encodages japonais
- Shift-JIS : Historiquement l'encodage le plus populaire pour le japonais, utilisé de manière extensive dans Windows et les anciens sites web.
Coréen et chinois traditionnel
- EUC-KR : Un encodage hérité courant pour le coréen.
- Big5 : Le standard pour les caractères chinois traditionnels utilisé principalement à Taïwan et Hong Kong.
3. Encodages occidentaux hérités
ISO-8859-1 (Latin-1)
Un encodage 8 bits qui couvre la plupart des langues d'Europe occidentale.
Windows-1252
Une légère variation de l'ISO-8859-1 utilisée par défaut dans les anciennes versions de Windows.
4. Nuances techniques : BOM et Endianness
Marque d'ordre des octets (BOM)
Le BOM est une séquence spéciale d'octets au début d'un fichier texte (ex : EF BB BF pour UTF-8). Il indique au logiciel l'encodage et l'ordre des octets utilisés. Bien qu'utile pour l'UTF-16, il est souvent déconseillé pour l'UTF-8 dans les environnements web.
Little Endian vs Big Endian
Pertinent pour l'UTF-16 et l'UTF-32, cela fait référence à l'ordre dans lequel les octets sont stockés en mémoire.
Résumé comparatif
| Encodage | Octets par caract. | Compatibilité | Meilleur usage |
|---|---|---|---|
| UTF-8 | 1-4 | ASCII | Web, Linux, Mac |
| UTF-16 | 2 ou 4 | Aucune | Windows, Java, JS |
| GB18030 | 1, 2 ou 4 | GBK | Conformité gouv. chinois |
| ASCII | 1 | Universel | Systèmes hérités, Anglais seul |
Conclusion
Le monde a largement adopté UTF-8 comme standard pour l'échange de données. Cependant, la compréhension des encodages hérités comme GBK ou Shift-JIS reste vitale lorsqu'on traite avec des systèmes anciens ou des logiciels régionaux spécifiques. En cas de doute, utilisez toujours l'UTF-8 sans BOM pour les applications modernes.