Encodage UTF-8

Tous les caractères qui existent dans le monde, quel que soit le système d'écriture, possèdent un code unique dans le standard Unicode (« Universal Character Encoding »).

L'UTF-8 (« Universal Character Set Transformation Format » 8 bits) est un format d'encodage permettant de coder les caractères Unicode sous forme de séquences de un à quatre octets.

Les caractères dont le code est inférieur ou égal à 127 (#7F) sont codés sur un seul octet (dont le premier bit est toujours 0). Ils n'ont pas besoin d'être encodés et leur code est identique quelle que soit la norme : Unicode, ASCII, ANSI, UTF-8.

Mais un encodage (quel qu'il soit) est nécessaire lorsque le code d'un caractère ne peut pas être représenté sur un seul octet. En effet, comment savoir si deux octets consécutifs correspondent à deux caractères consécutifs ou bien à un seul caractère codé sur deux octets ?

Outre le code du caractère lui-même, l'encodage permet de déterminer sans erreur le nombre d'octets nécessaire pour chaque caractère. Du reste, comme on le remarque dans le tableau qui suit, chaque octets commence par une séquence bien précise : le premier octet d'une séquence de deux octets commence toujours par 110 ; le premier octet d'une séquence de trois octets commence toujours par 1110 etc.

Ainsi, les caractères dont le code est supérieur ou égal à 128 (#80) doivent être encodés (selon la norme UTF-8) sur 2, 3 ou 4 octets selon les modèles suivants :

décimalhexadécimalnb d'octetsmodèle
de 0 à 127#0 à #7F1 octet0xxxxxxx
de 128 à 2 047#80 à #7FF2 octets110xxxxx 10xxxxxx
de 2 048 à 65 535#800 à #FFFF3 octets1110xxxx 10xxxxxx 10xxxxxx
de 65 536 à ....#10000 à #10FFFF4 octets11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Exemple :

Le caractère « é » possède le code Unicode 233 ou #E9 (en hexadécimal) dont la représentation binaire est : 1110 1001

Ce code étant supérieur à 127 (#7F), il doit être encodé. Etant compris entre 128 et 2 047 (entre #80 à #7FF), il le sera sur 2 octets.

Il faut donc utiliser le modèlé 110xxxxx 10xxxxxx et remplacer chaque x par chaque digit de la valeur binaire en commençant par la droite et en complétant au besoin par des zéros.

Nous obtenons : 11000011 10101001, soit deux valeurs binaires (une pour chacun des deux octets) qui, une fois traduitent en hexadécimal, donnent #C3 et #A9.

Ainsi, dans un fichier texte, le « é » sera codé #E9 au format ANSI et #C3 #A9 au format UTF-8 (sur un octet de plus).

---

Note : Pour visualiser la représentation hexadécimale d'un fichier texte, il est possible d'utiliser un outil comme HxD.