UAA 10    HW-Data

Comment on est arrivé à UTF-8

1. Résumé essentiel

UTF-8 est l'acronyme de Unicode Transformation Format 8‑bit.

UTF-8 est né pour résoudre trois problèmes majeurs :

UTF-8 encode Unicode sans casser l’ASCII, avec une longueur variable.

2. Avant UTF-8 : le chaos des codages

2.1 ASCII (années 1960)

ASCII utilise 7 bits, soit 128 caractères. Suffisant pour l’anglais, mais impossible d’écrire des lettres accentuées comme « é », « ç », « ü ». Le 8e bit est au départ inutilisé.

Exemple :

A = 1000001₂ (65 en décimal)

2.2 Extensions 8 bits : ISO-8859, CP1252, etc.

Pour ajouter des accents, on utilise le 8e bit, ce qui donne 256 positions possibles. Chaque région définit sa propre table :

Problèmes :

Exemple :

Fichier CP1252 lu comme ISO-8859-1 → "é" au lieu de "é".

3. Unicode : unifier le monde (à partir de 1991)

Unicode introduit l’idée de point de code : chaque caractère reçoit un numéro unique, de la forme U+XXXX. Unicode sépare :

Problème restant : comment encoder efficacement ces points de code dans des octets ?

3.1 Limites de UTF-16

UTF-16 encode la plupart des caractères sur 2 octets, certains sur 4 (surrogates). Mais :

Il fallait un encodage plus souple et compatible avec l’existant.

4. Naissance d’UTF-8 (années 1990)

UTF-8 est conçu pour respecter trois contraintes majeures :

UTF-8 est standardisé dans les années 1990 et devient le standard d’Internet au début des années 2000.

5. Fonctionnement technique d’UTF-8

UTF-8 est un encodage à longueur variable :

5.1 Forme des octets

1 octet  : 0xxxxxxx
2 octets : 110xxxxx 10xxxxxx
3 octets : 1110xxxx 10xxxxxx 10xxxxxx
4 octets : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

6. Exemples concrets

6.1 Lettre « é »

6.2 Symbole « € »

6.3 Emoji « 😄 »

7. Pourquoi UTF-8 a gagné ?

UTF-8 s’est imposé parce qu’il combine :

Résultat : UTF-8 est aujourd’hui le codage dominant sur le Web et dans la plupart des systèmes modernes.

8. Conclusion

Le chemin vers UTF-8 suit une logique claire :

  1. ASCII : simple mais trop limité.
  2. ISO-8859 et autres tables : fragmentation et incompatibilités.
  3. Unicode : unification des caractères du monde entier.
  4. UTF-8 : encodage universel, efficace et compatible avec l’héritage ASCII.

C’est cette combinaison qui fait d’UTF-8 le standard de fait pour le texte numérique aujourd’hui.


Topo sur les octets de continuation en UTF-8

Définition

En UTF-8, un octet de continuation est un octet qui ne peut pas commencer une séquence de caractère. Il sert uniquement à compléter un caractère encodé sur plusieurs octets.

Forme binaire

Un octet de continuation a toujours la forme binaire :

10xxxxxx

Cela signifie que les deux bits de poids fort sont 10, et les six bits restants (xxxxxx) contiennent une partie du code du caractère.

Rôle dans les séquences UTF-8

Les séquences UTF-8 se structurent ainsi :

Exemple : « é » (U+00E9)

UTF-8 : C3 A9

Exemple : emoji 😄 (U+1F604)

UTF-8 : F0 9F 98 84


Décodage UTF-8

1. Principe général

UTF-8 encode chaque caractère sur 1 à 4 octets. Pour décoder une séquence UTF-8, il faut :

2. Motifs des octets UTF-8

Le premier octet indique la longueur :

Les octets suivants sont toujours des octets de continuation :

10xxxxxx

3. Exemple complet : F0 9F 98 80 (emoji 😀)

Étape 1 : Déterminer la longueur

F0 en binaire → 11110000
Ce motif commence par 11110 → caractère encodé sur 4 octets.

Étape 2 : Convertir chaque octet en binaire et retirer les préfixes

Étape 3 : Assembler les bits utiles

000 011111 011000 000000

Étape 4 : Convertir en hexadécimal

Le binaire complet devient : 0000111110110000000000
Converti en hexadécimal → 1F600

Étape 5 : Identifier le caractère

Le point de code Unicode U+1F600 correspond au caractère : 😀

4. Résumé

Décoder UTF-8 consiste à :


Encodage UTF-8 – Exemple au décodage

Objectif

À partir d’un point de code Unicode, reconstruire les octets UTF-8 correspondants.

Exemple : U+00E9 (le caractère « é »)

Étape 1 : Convertir le point de code en binaire

U+00E9 → en binaire : 0000 0000 1110 1001

Étape 2 : Déterminer la longueur UTF-8

Le point de code est supérieur à 0x007F → il nécessite 2 octets UTF-8.

Étape 3 : Extraire les bits utiles

On prend les 11 bits significatifs du point de code :

11101001

On les découpe pour les insérer dans les deux octets UTF-8 :

Étape 4 : Insérer dans les masques UTF-8

Étape 5 : Convertir en hexadécimal

Résultat final

Le caractère « é » (U+00E9) s’encode en UTF-8 sous la forme :

C3 A9

Résumé