Codage de caractères Unicode

Le standard de codage de caractères Unicode est un schéma de codage de caractères de longueur fixe qui comprend des caractères de presque toutes les langues vivantes du monde.

Des informations sur Unicode sont disponibles dans The Unicode Standardet sur le site Web du consortium Unicode à l'adresse www.unicode.org.

Unicode utilise deux formes de codage: 8 bits et 16 bits, basées sur le type de données des données en cours de codage. Le format de codage par défaut est 16 bits, où chaque caractère a une largeur de 16 bits (2 octets). La forme de codage à seize bits est généralement affichée sous la forme U + hhhh, où hhhh est le point de code hexadécimal du caractère. Cette forme de codage produit plus de 65 000 éléments de code, ce qui est suffisant pour coder la plupart des caractères des principales langues du monde. La norme Unicode fournit également un mécanisme d'extension qui permet le codage d'un maximum de 1 000 000 caractères supplémentaires. Le mécanisme d'extension utilise une paire de caractères de substitution haut et bas pour coder un caractère étendu ou supplémentaire. Le premier caractère de substitution (ou caractère de substitution supérieur) a une valeur de code comprise entre U+D800 et U + DBFF. Le second (ou faible) caractère de substitution a une valeur de code comprise entre U+DC00 et U + DFFF.

UCS-2

L'Organisation internationale de normalisation (ISO) et la norme 10646 de la Commission électrotechnique internationale (CEI) (ISO/CEI 10646) spécifient le jeu universel de caractères codés sur plusieurs octets (UCS). Ce jeu de caractères possède une version 16 bits (deux octets) (UCS-2) et une version 32 bits (quatre octets) (UCS-4). UCS-2 est identique à la forme Unicode 16 bits sans substitutions. UCS-2 peut coder tous les caractères (16 bits) définis dans le répertoire Unicode version 3.0 . Deux caractères UCS-2 -une valeur élevée suivie d'une valeur de substitution faible-sont nécessaires pour coder chacun des nouveaux caractères supplémentaires, à partir de la version Unicode 3.1. Ces caractères supplémentaires sont définis en dehors du plan multilingue de base 16 bits d'origine (BMP ou Plane 0).

UTF-16

La norme ISO/IEC 10646 définit également une technique d'extension pour le codage de certains caractères UCS-4 à l'aide de deux caractères UCS-2 . Cette extension, appelée UTF-16, est identique à la forme de codage Unicode 16 bits avec des substitutions. En résumé, le répertoire de caractères UTF-16 comprend tous les caractères UCS-2 plus les 1 000 000 caractères supplémentaires qui sont accessibles via les paires de substitution.

Lors de la sérialisation de caractères Unicode 16 bits en octets, l'ordre dans lequel les octets apparaissent dépend du processeur utilisé. Certains processeurs placent l'octet le plus significatif dans la position initiale (appelé ordre big-endian), tandis que d'autres placent l'octet le moins significatif en premier (appelé ordre little-endian). L'ordre des octets par défaut pour Unicode est big-endian.

UTF-8

Les caractères Unicode 16 bits posent un problème majeur pour les applications ASCII orientées octet et les systèmes de fichiers. Par exemple, les applications non Unicode peuvent mal interpréter les 8 premiers bits de zéro du caractère majuscule'A'(U+0041) comme le caractère ASCII NULL à un octet.

UTF-8 (UCS Transformation Format 8) est une transformation algorithmique qui transforme des caractères Unicode de longueur fixe en chaînes d'octets ASCII de longueur variable. En UTF-8, les caractères ASCII et de contrôle sont représentés par leurs codes mono-octet habituels, et les autres caractères deviennent d'une longueur d'au moins deux octets. UTF-8 peut coder à la fois des caractères non supplémentaires et des caractères supplémentaires.

Les caractères UTF-8 peuvent comporter jusqu'à 4 octets. Les caractères non supplémentaires peuvent comporter jusqu'à 3 octets et les caractères supplémentaires jusqu'à 4 octets.

Le nombre d'octets de chaque caractère UTF-16 au format UTF-8 peut être déterminé à partir du Tableau 1.

Tableau 1. UTF-8 UTF-8
Valeur de code

(binaire)

UTF-16

(binaire)

Premier octet

(binaire)

Deuxième octet

(binaire)

Troisième octet

(binaire)

Quatrième octet

(binaire)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

aaxxxxxx

00000yyy

aaxxxxxx

110yyyyy 10xxxxxx    
zzzzyyyy

aaxxxxxx

zzzzyyyy

aaxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuu

zzzzyyyy

aaxxxxxx

110110ww

wwzzzzyy

110111yy

aaxxxxxx

11110uuu

(où uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

Dans chacune des valeurs de code listées dans le tableau précédent, la série de u, w, x, y et z est la représentation binaire du caractère. Par exemple, U+0080 se transforme en 11000010 10000000 au format binaire et la paire de caractères de substitution U+D800 U+DC00 devient 11110000 10010000 10000000 10000000 au format binaire.