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 la dernière édition de The Unicode Standard et sur le site Web Unicode Consortium à 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, c'est-à-dire que chaque caractère a une largeur de 16 bits (deux octets) et est généralement affiché sous la forme U + hhhh, où hhhh est le point de code hexadécimal du caractère. Alors que le résultat de plus de 65 000 éléments de code sont suffisants 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 de jusqu'à un million de 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 (ou haut) caractère de substitution a une valeur de code comprise entre U+D800 et U + DBFF, et le second (ou bas) 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 de caractères codés universel à plusieurs octets (UCS) qui 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 requis pour coder chacun des nouveaux caractères supplémentaires introduits à partir d'Unicode version 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 un million de caractères supplémentaires accessibles via les paires de substitution.

Lors de la sérialisation de caractères Unicode 16 bits en octets, 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)

1st octet

(binaire)

2nd octet

(binaire)

3rd octet

(binaire)

4th 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.