Comment utiliser cette page

Cette page suit toujours le même plan : le principe en une phrase, les étapes dans l'ordre exact, une démonstration interactive, le code Python, puis les points clés à retenir.

Utilisation de la démonstration
La démonstration avance uniquement quand vous cliquez sur « Suivant » ou « Précédent » : rien ne bouge tout seul. Un bouton « Lecture automatique » est disponible si vous préférez laisser les étapes défiler seules, à une vitesse que vous choisissez.

1. Vocabulaire à connaître avant de commencer

Chaque mot ci-dessous est utilisé exactement dans ce sens dans toute la page.

MotDéfinition précise
CaractèreUne lettre, un chiffre, un symbole ou un espace : l'unité de base d'un texte.
EncodageLa règle qui associe à chaque caractère une suite de bits (0 et 1), pour pouvoir le stocker ou l'envoyer sous forme numérique.
Code pointLe numéro attribué à un caractère (par exemple, 65 pour la lettre A). On l'écrit souvent en hexadécimal, précédé de U+ (par exemple U+0041).
ASCIIUn des premiers standards d'encodage, qui utilise 7 bits (donc 128 caractères possibles) : lettres non accentuées, chiffres, ponctuation.
UnicodeUn standard qui attribue un code point unique à un très grand nombre de caractères de toutes les langues du monde, ainsi qu'aux émojis.
UTF-8Une façon d'encoder les code points Unicode en octets, en utilisant de 1 à 4 octets selon le caractère. Les caractères ASCII gardent le même code sur 1 octet.
OctetUn groupe de 8 bits.

2. Le caractère d'exemple utilisé dans cette page

On encode le caractère é en UTF-8. Ce caractère est un bon exemple car il n'existe pas en ASCII (qui ne contient pas les lettres accentuées) : il faut donc 2 octets en UTF-8, au lieu d'un seul.

Résultat à retrouver
é a pour code point 233 (U+00E9). En UTF-8, il s'encode sur 2 octets : 11000011 10101001 (soit 0xC3 0xA9).

3. L'encodage UTF-8

3.1 — Principe, en une phrase

Principe
UTF-8 encode le code point d'un caractère sur 1 à 4 octets : les caractères ASCII (code point ≤ 127) tiennent sur 1 octet, les autres utilisent plusieurs octets dont les premiers bits indiquent combien d'octets sont utilisés.

3.2 — Les étapes, dans l'ordre exact

  1. On trouve le code point du caractère (son numéro dans la table Unicode).
  2. On regarde dans quel intervalle se trouve ce code point, pour savoir sur combien d'octets il doit être encodé (1, 2, 3 ou 4).
  3. On écrit le code point en binaire, sur le nombre de bits utiles pour ce nombre d'octets.
  4. On découpe ces bits en morceaux, et on les répartit dans les octets : le premier octet commence par des bits fixes qui indiquent le nombre total d'octets, les octets suivants commencent tous par 10.

3.3 — Démonstration interactive

bits fixes (indiquent la structure) bits du code point
Étape 1 / 1
On encode le caractère « é ».

3.4 — Autres exemples, pour comparer

CaractèreCode pointNombre d'octets en UTF-8Octets (hexadécimal)
A65 (U+0041)1 (caractère ASCII)0x41
é233 (U+00E9)20xC3 0xA9
8364 (U+20AC)30xE2 0x82 0xAC

Plus le code point est grand (plus le caractère est « loin » dans la table Unicode), plus il faut d'octets pour l'encoder en UTF-8.

3.5 — Code Python

caractere = "é"code_point = ord(caractere)print(code_point)# Résultat affiché : 233octets = caractere.encode("utf-8")print(list(octets))# Résultat affiché : [195, 169]print([format(o, '08b') for o in octets])# Résultat affiché : ['11000011', '10101001']# Et pour retrouver le caractère à partir des octets :print(octets.decode("utf-8"))# Résultat affiché : é

3.6 — Points clés à retenir

Prêt(e) pour la suite ? → Retour à l'accueil