UTF-8 : comment ça marche

malekalmorte

Date création :

29 mai 2023

Dernière modification :

ASCII, un ancien jeu de caractères, utilisé dans le codage informatique mais qui a très vite connu des limitations.
Pour uniformiser et résoudre ces problèmes, le standard informatique universel, Unicode a vu le jour.
UTF-8 (Universal Character Set Transformation Format – 8 bits) est un des systèmes d’encodage d’Unicode qui est maintenant utilisé par défaut dans les systèmes d’exploitations Windows ou Linux.

Dans ce tutoriel, je vous explique comment UTF-8 fonctionne.

UTF-8 : comment ça marche

Qu’est-ce que l’Unicode

Au début des années 90 est née la norme Unicode, qui fournit un codage, une représentation et un traitement cohérents des textes exprimés dans la plupart des systèmes d’écriture du monde. La norme est maintenue par une société connue sous le nom de Consortium Unicode, et en mars 2020, il existe un répertoire de 143 859 caractères, avec Unicode 13.0. Ces caractères se composent de 143 696 caractères graphiques et de 163 caractères de format couvrant 154 écritures modernes et historiques, ainsi que de multiples jeux de symboles et d’émojis.

Unicode utilise un système de codage simple basé sur des nombres entiers non signés (positifs). Chaque caractère se voit attribuer une valeur entière comprise entre 0 et 1 114 111. Ces nombres entiers sont appelés points de code. Les premiers caractères de la norme Unicode sont identiques à ceux de la norme ASCII (par exemple, A est 65). Chaque nouveau caractère ajouté se voit attribuer une valeur de point de code incrémentée. Les points de code de quelques caractères de la langue hindi sont indiqués ci-dessous.

En règle générale, le jeu de caractères d’une langue autre que l’anglais suit son alphabet.

La convention pour se référer à un caractère dans Unicode est de commencer par « U+ » suivi de la valeur du point de code en hexadécimal. La gamme des points de code valides pour la norme Unicode va de U+0000 à U+10FFFF, inclusivement, divisée en 17 plans, identifiés par les nombres 0 à 16.
Les caractères compris entre U+0000 et U+FFFF se trouvent dans le plan 0, appelé Basic Multilingual Plane (BMP).

Voici un exemple :

GlyphePoint de code en Unicode
ΑU+0041
ßU+00DF
U+6771
&U+0026
¡U+00A1
§U+00A7
Point de code en Unicode

Le problème est que les ordinateurs ne peuvent stocker et traiter que des codes binaires, et qu’il faut donc transformer ces nombres en 0 et 1. Plusieurs systèmes d’encodage permettent de réaliser cet exploit, comme UTF-8, UTF-16, …

Qu’est-ce que UTF-8

UTF-8 rend la norme Unicode utilisable en nous donnant un moyen efficace de transformer les nombres en code binaire. Dans de nombreux cas, il s’agit de l’encodage par défaut pour de nombreux langages de programmation et sites web, et ce pour deux raisons essentielles :

  • UTF-8 (et Unicode) sont compatibles avec ASCII. Lorsque l’UTF-8 a été créé en 1993, de nombreuses données étaient en ASCII. En rendant l’UTF-8 compatible avec l’ASCII, les gens n’avaient pas besoin de transformer les données avant de les utiliser. En fait, un fichier en ASCII peut être traité comme un fichier en UTF-8
  • L’UTF-8 est efficace. Lorsque nous stockons ou envoyons des caractères par l’intermédiaire d’un ordinateur, il est important qu’ils n’occupent pas trop d’espace disque

Comment fonctionne UTF-8

Dans la représentation des caractères en UTF-8, chaque point de code est représenté par une séquence d’un ou plusieurs octets. Le nombre d’octets utilisés dépend du point de code représenté par le caractère.

L’UTF-8 stocke les nombres de manière dynamique. Les premiers de la liste Unicode prennent 1 octet, mais les derniers peuvent prendre jusqu’à 4 octets. Ainsi, si vous avez affaire à un fichier anglais, la plupart des caractères ne prendront probablement qu’un octet, comme en ASCII.

Cela permet de couvrir différentes plages du spectre Unicode avec un nombre différent d’octets.

Par exemple, pour coder n’importe quel caractère de la table ASCII originale (de 0 à 127 en décimales), nous n’avons besoin que de 7 bits puisque 2^7 = 128. Par conséquent, nous pouvons tout stocker dans un octet de 8 bits, et il nous en reste un de libre.

Pour la plage suivante (de 128 à 2047), nous avons besoin de 11 bits puisque 2^11 = 2 048, soit 2 octets en UTF-8, avec quelques bits permanents pour nous donner des indices. Jetons un coup d’œil au tableau complet, et vous verrez ce que je veux dire :

Lorsque nous lisons des 1 et des 0 dans un ordinateur, nous n’avons pas le concept d’espace entre eux, et nous avons donc besoin d’un moyen de dire « voici ce type de valeur », ou « lisez x bits maintenant ». Dans l’UTF-8, nous y parvenons en plaçant stratégiquement quelques 1 et 0.

Si vous êtes un ordinateur et que vous lisez quelque chose qui commence par 0 en UTF-8, vous savez qu’il vous suffit de lire un octet et d’afficher le bon caractère de l’Unicode dans la plage 0-127.

Si vous rencontrez deux 1 ensemble, cela signifie que vous devez lire deux octets et que vous vous trouvez dans la plage 128-2 047. Trois 1 ensemble signifient que vous devez lire trois octets.

  • Caractère à 1 octet : 0xxxxxxx
  • Caractère sur 2 octets : 110xxxxx 10xxxxxx
  • Caractères sur 3 octets : 1110xxxx 10xxxxxx 10xxxxxx
  • Caractère sur 4 octets : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Voyons quelques exemples :

Un caractère (tel que « A ») est traduit en un nombre selon la table géante d’Unicode (« 65 »). Ensuite, l’UTF-8 transforme ce nombre en code binaire (01000001) en suivant le modèle que nous avons montré.

Si nous avons un caractère dans une gamme supérieure, comme Ѱ, qui vaut 8546 (U+2162) selon Unicode, nous avons besoin de 3 octets :

11100010 10000101 10100010

Ainsi, en règle générale, les autres octets de ces groupes commencent tous par « 10 » pour signaler qu’ils font partie d’un groupe de caractères.
Cela permet à l’ordinateur de regrouper trois ou quatre octets pour former un seul caractère.

A propros de malekalmorte

malekal-site-logo-150

Passionné par l'informatique depuis très jeune, j'aide les internautes sur les forums depuis 2005 pour résoudre leurs tracas informatiques.
Je vous propose par la même occasion ce site avec de nombreux tutoriels pour vous aider aussi à résoudre de manière autonome les problèmes informatiques du quotidien.