1. Introduction
ISO/IEC 10646 [ISO.10646] définit un grand ensemble de caractères appelé Universal Character Set (UCS, Jeu de caractères universel), qui englobe la plupart des systèmes d'écriture du monde. Le même ensemble de caractères est défini par la norme Unicode [UNICODE], qui définit en outre des propriétés de caractères supplémentaires et d'autres détails d'application d'un grand intérêt pour les implémenteurs. Jusqu'à présent, les modifications d'Unicode et les amendements et ajouts à ISO/IEC 10646 se sont suivis mutuellement, de sorte que les répertoires de caractères et les attributions de points de code sont restés synchronisés. Les comités de normalisation concernés se sont engagés à maintenir ce synchronisme très utile.
Formes de codage (Encoding Forms)
ISO/IEC 10646 et Unicode définissent plusieurs formes de codage de leur répertoire commun :
- UTF-8
- UCS-2
- UTF-16
- UCS-4
- UTF-32
Dans une forme de codage, chaque caractère est représenté comme une ou plusieurs unités de codage. Toutes les formes de codage UCS standard, à l'exception d'UTF-8, ont une unité de codage supérieure à un octet, ce qui les rend difficiles à utiliser dans de nombreuses applications et protocoles actuels qui supposent des caractères de 8 ou même 7 bits.
Caractéristiques d'UTF-8 (Characteristics of UTF-8)
UTF-8, l'objet de ce mémo, a une unité de codage d'un octet. Il utilise tous les bits d'un octet, mais a la qualité de préserver la plage complète US-ASCII [US-ASCII] :
- Les caractères US-ASCII sont codés en un octet ayant la valeur US-ASCII normale
- Tout octet ayant une telle valeur ne peut représenter qu'un caractère US-ASCII, et rien d'autre
Propriétés du codage UTF-8 (UTF-8 Encoding Properties)
UTF-8 code les caractères UCS sous forme d'un nombre variable d'octets, où le nombre d'octets, et la valeur de chacun, dépendent de la valeur entière attribuée au caractère dans ISO/IEC 10646 (le numéro de caractère, également connu sous le nom de position de code (code position), point de code (code point) ou valeur scalaire Unicode (Unicode scalar value)).
Cette forme de codage présente les caractéristiques suivantes (toutes les valeurs sont en hexadécimal) :
✅ Compatibilité ASCII
Les numéros de caractères de U+0000 à U+007F (répertoire US-ASCII) correspondent aux octets 00 à 7F (valeurs US-ASCII 7 bits). Une conséquence directe est qu'une chaîne ASCII simple est également une chaîne UTF-8 valide.
✅ Pas de confusion avec ASCII
Les valeurs d'octets US-ASCII n'apparaissent pas autrement dans un flux de caractères codé en UTF-8. Cela fournit une compatibilité avec les systèmes de fichiers ou autres logiciels (par exemple, la fonction printf() dans les bibliothèques C) qui analysent sur la base de valeurs US-ASCII mais sont transparents aux autres valeurs.
✅ Conversion facile
La conversion aller-retour est facile entre UTF-8 et d'autres formes de codage.
✅ Indication de longueur de séquence
Le premier octet d'une séquence multi-octets indique le nombre d'octets dans la séquence.
✅ Valeurs d'octets restreintes
Les valeurs d'octets C0, C1, F5 à FF n'apparaissent jamais.
✅ Reconnaissance des limites de caractères
Les limites de caractères sont facilement trouvées à partir de n'importe où dans un flux d'octets.
✅ Préservation du tri
L'ordre de tri lexicographique par valeur d'octet des chaînes UTF-8 est le même que si elles étaient ordonnées par numéros de caractères. Bien sûr, cela n'a qu'un intérêt limité puisqu'un ordre de tri basé sur les numéros de caractères n'est presque jamais culturellement valide.
✅ Algorithmes de recherche rapides
L'algorithme de recherche rapide Boyer-Moore peut être utilisé avec les données UTF-8.
✅ Reconnaissabilité
Les chaînes UTF-8 peuvent être reconnues comme telles de manière assez fiable par un algorithme simple, c'est-à-dire que la probabilité qu'une chaîne de caractères dans tout autre codage apparaisse comme UTF-8 valide est faible, diminuant avec l'augmentation de la longueur de la chaîne.
Histoire d'UTF-8 (History of UTF-8)
UTF-8 a été conçu en septembre 1992 par Ken Thompson, guidé par des critères de conception spécifiés par Rob Pike, avec l'objectif de définir un format de transformation UCS utilisable dans le système d'exploitation Plan9 de manière non perturbatrice. La conception de Thompson a été guidée à travers la normalisation par le X/Open Joint Internationalization Group XOJIG (voir [FSS_UTF]), portant les noms FSS-UTF (variante FSS/UTF), UTF-2 et finalement UTF-8 en cours de route.
Liens connexes
- Retour à l'accueil RFC 3629
- Suivant : 2. Notational conventions (Conventions de notation)