Encodage des caractères : Unicode et UTF-8 expliqués
Mis à jour 2026-07-06
Vous l'avez vu : un nom qui devrait se lire José apparaît comme José, ou un emoji devient une boîte de points d'interrogation. Ce charabia a un nom — mojibake — et c'est presque toujours une incompatibilité d'encodage de caractères. Ce guide explique ce que sont vraiment les caractères, Unicode et UTF-8, pour que ces bugs cessent d'être mystérieux.
Les ordinateurs stockent des nombres, pas des lettres
Au niveau le plus bas, un ordinateur ne stocke que des nombres (octets). Pour stocker du texte, il faut une table convenue qui associe chaque caractère à un nombre, et inversement. Cette table est un encodage de caractères. Si un programme écrit du texte avec une table et qu'un autre le lit avec une table différente, les nombres sont interprétés comme les mauvais caractères — et vous obtenez du mojibake.
ASCII : le petit commencement
L'encodage originel largement répandu, ASCII, définissait des nombres pour 128 caractères : l'alphabet anglais, les chiffres, la ponctuation et quelques codes de contrôle. Suffisant pour l'anglais, mais aucune place pour é, ü, ß, 你, 😀 ni les dizaines de milliers de caractères des langues du monde. Pendant des décennies, chacun a inventé ses propres extensions incompatibles, et c'est précisément pourquoi le texte cassait en passant d'un système à l'autre.
Unicode : un nombre pour chaque caractère
Unicode est la solution universelle : une norme unique qui attribue un nombre unique — appelé point de code (code point) — à chaque caractère de chaque système d'écriture, plus les symboles et les emoji. Les points de code s'écrivent U+ suivi d'un nombre hexadécimal :
A → U+0041 é → U+00E9 你 → U+4F60 😀 → U+1F600
Point crucial, Unicode définit les nombres mais pas comment les stocker en octets. C'est une décision distincte — et c'est là qu'intervient UTF-8.
UTF-8 : comment Unicode devient des octets
UTF-8 est une façon d'encoder les points de code Unicode en octets, et celle que le web utilise massivement. Son ingénieux principe est d'être à longueur variable :
- Les 128 caractères ASCII prennent 1 octet chacun — UTF-8 est donc rétrocompatible avec ASCII.
- La plupart des caractères latins accentués et grecs/cyrilliques prennent 2 octets.
- La plupart des autres écritures, dont le chinois, le japonais et le coréen, prennent 3 octets.
- Les emoji et les caractères plus rares prennent 4 octets.
Voilà pourquoi une chaîne de « 100 caractères » ne fait pas toujours 100 octets : un caractère peut faire plusieurs octets. Cela explique aussi le classique bug José — ce sont les octets UTF-8 de é lus par erreur, un octet à la fois, comme un ancien encodage occidental.
Caractères, points de code et octets
Trois notions liées mais différentes font trébucher les gens sans cesse :
- Caractère (Character) — ce qu'un humain voit (la lettre
é). - Point de code (Code point) — le nombre Unicode correspondant (
U+00E9). - Octet (Byte) — comment il est stocké (en UTF-8, les deux octets
0xC3 0xA9).
Voir un point de code écrit en toutes lettres est souvent le moyen le plus rapide de diagnostiquer un problème de texte — par exemple, une « espace » qui s'avère être une espace insécable (U+00A0). Notre convertisseur Unicode montre les points de code derrière n'importe quel texte et convertit entre caractères et séquences d'échappement.
Comment éviter le mojibake
- Utilisez UTF-8 partout. Enregistrez les fichiers en UTF-8 et déclarez-le — sur les pages web,
<meta charset="utf-8">; en HTTP, le charset deContent-Type; en base de données, un collationnement UTF-8. - Restez cohérent de bout en bout. La plupart des corruptions surviennent à une frontière où un côté suppose un encodage différent.
- Échappez pour le bon contexte. Pour mettre des caractères spéciaux en toute sécurité dans du HTML, utilisez les entités HTML ; pour les mettre dans une URL, l'encodage d'URL.
La version courte : Unicode donne un nombre à chaque caractère, UTF-8 transforme ces nombres en octets, et si tout le monde s'accorde à utiliser UTF-8, le texte cesse de casser.
Plus sur Formats de données & encodage
Voir tous les guides Formats de données & encodage →Outils mentionnés dans ce guide