Encodage de texte expliqué : UTF-8, ASCII, Unicode et jeux de caractères

· 12 min de lecture

Table des matières

Chaque fois que vous tapez un message, enregistrez un document ou naviguez sur un site web, l'encodage de caractères fonctionne en coulisses pour traduire le texte lisible par l'homme en données binaires que les ordinateurs comprennent. Bien qu'il soit fondamental pour toute communication numérique, l'encodage reste l'un des aspects les plus mal compris de l'informatique.

Ce guide complet explique tout ce que vous devez savoir sur l'encodage de texte, des bases de l'ASCII aux complexités d'Unicode et UTF-8. Que vous soyez un développeur déboguant des problèmes d'encodage ou simplement curieux de savoir comment les ordinateurs gèrent le texte, vous trouverez ici des informations pratiques et des solutions.

Qu'est-ce que l'encodage de caractères ?

L'encodage de caractères est le système qui associe des caractères—lettres, chiffres, symboles et caractères spéciaux—à des valeurs numériques que les ordinateurs peuvent stocker et traiter. Lorsque vous tapez la lettre « A » sur votre clavier, votre ordinateur ne stocke pas la lettre elle-même. Au lieu de cela, il stocke un nombre (en ASCII, c'est 65) et utilise le schéma d'encodage pour reconvertir ce nombre en « A » lors de l'affichage.

Considérez l'encodage de caractères comme un dictionnaire de traduction entre le langage humain et le langage informatique. Sans ce dictionnaire, le texte serait des séquences d'octets dénuées de sens sans aucun moyen de les interpréter correctement.

Le processus d'encodage fonctionne dans deux directions :

Des problèmes surviennent lorsque l'encodage et le décodage utilisent des schémas différents. Imaginez si vous chiffriez un message avec un code et essayiez de le déchiffrer avec un autre—vous obtiendriez du charabia. La même chose se produit avec les incompatibilités d'encodage de texte, entraînant des caractères corrompus ou le fameux « mojibake » (nous y reviendrons plus tard).

Conseil : Utilisez notre outil Encodeur de texte pour voir exactement comment différents schémas d'encodage représentent le même texte. Cette approche pratique aide à démystifier le processus d'encodage.

ASCII : Les fondations de l'encodage de texte

ASCII (American Standard Code for Information Interchange) a été développé en 1963 et est devenu la base de l'encodage de texte moderne. Il utilise 7 bits pour représenter 128 caractères, ce qui était suffisant pour le texte anglais et les besoins informatiques de base de l'époque.

Le jeu de caractères ASCII est divisé en plusieurs plages, chacune servant un objectif spécifique :

Plage Caractères Nombre Objectif
0-31 Caractères de contrôle 32 Commandes non imprimables (tabulation, nouvelle ligne, retour chariot)
32-47 Ponctuation et symboles 16 Espace, !, ", #, $, %, &, ', (, ), *, +, virgule, -, ., /
48-57 Chiffres 10 0-9
58-64 Ponctuation 7 :, ;, <, =, >, ?, @
65-90 Lettres majuscules 26 A-Z
91-96 Ponctuation 6 [, \, ], ^, _, `
97-122 Lettres minuscules 26 a-z
123-126 Ponctuation 4 {, |, }, ~
127 Supprimer 1 Caractère de contrôle DEL

Les limites de l'ASCII

ASCII fonctionne parfaitement pour le texte anglais, mais il présente de sévères limitations pour la communication internationale :

Ces limitations ont conduit à la création de variantes « ASCII étendu » comme ISO-8859-1 (Latin-1), qui utilisait le 8e bit pour ajouter 128 caractères supplémentaires. Cependant, différentes régions ont créé des extensions incompatibles, faisant en sorte que les mêmes valeurs d'octets représentent différents caractères selon la page de code utilisée.

L'impact durable de l'ASCII

Malgré ses limitations, ASCII reste pertinent aujourd'hui. Les 128 premiers caractères d'UTF-8 (l'encodage moderne dominant) sont identiques à ASCII, assurant une rétrocompatibilité. Cela signifie que tout texte ASCII valide est également UTF-8 valide, rendant la migration transparente.

La simplicité de l'ASCII le rend également idéal pour les protocoles, formats de fichiers et systèmes où seul du texte anglais de base est nécessaire. Les langages de programmation, interfaces en ligne de commande et protocoles réseau s'appuient encore largement sur les caractères ASCII.

Unicode : Un jeu de caractères universel

Unicode a été créé en 1991 pour résoudre le problème fondamental que l'ASCII et ses extensions ne pouvaient pas résoudre : représenter tous les systèmes d'écriture du monde dans une norme unique et unifiée. Plutôt que d'avoir des dizaines de schémas d'encodage incompatibles, Unicode fournit un système qui fonctionne pour tout le monde.

Unicode n'est pas un encodage en soi—c'est un jeu de caractères qui attribue un nombre unique appelé point de code à chaque caractère. Depuis Unicode 15.1 (publié en 2023), la norme comprend plus de 149 000 caractères couvrant 161 écritures et ensembles de symboles.

Comprendre les points de code

Les points de code sont écrits au format U+XXXX, où XXXX est un nombre hexadécimal. Voici quelques exemples :

L'espace de code Unicode va de U+0000 à U+10FFFF, offrant de la place pour 1 114 112 points de code possibles. Ceux-ci sont organisés en 17 plans de 65 536 points de code chacun.

Plans Unicode

Les plans les plus importants incluent :

Astuce rapide : Les caractères du BMP (Plan 0) peuvent être représentés avec 16 bits, tandis que les caractères d'autres plans nécessitent plus de bits. Cette distinction est importante lors du choix entre UTF-8, UTF-16 et UTF-32.

Normalisation Unicode

Une complexité d'Unicode est que certains caractères peuvent être représentés de plusieurs façons. Par exemple, le caractère « é » peut être encodé comme :

Les deux représentations semblent identiques mais ont des séquences d'octets différentes. Les formes de normalisation Unicode (NFD, NFC, NFKD, NFKC) fournissent des moyens standard de convertir entre ces représentations, assurant une comparaison et une recherche cohérentes.

UTF-8 : L'encodage standard d'Internet

UTF-8 (Unicode Transformation Format - 8 bits) est l'encodage de caractères le plus largement utilisé sur Internet, représentant plus de 98 % de toutes les pages web. Il a été conçu par Ken Thompson et Rob Pike en 1992 et est devenu la norme de facto pour l'encodage de texte.

UTF-8 est un encodage à longueur variable qui utilise de 1 à 4 octets par caractère. Cette conception intelligente offre plusieurs avantages :

Comment fonctionne UTF-8

UTF-8 encode les caractères en utilisant le schéma suivant :

Plage de points de code Octets Motif d'octets Exemples de caractères
U+0000 à U+007F 1 0xxxxxxx Caractères ASCII (A, 5, $)
U+0080 à U+07FF 2 110xxxxx 10xxxxxx Latin étendu, grec, cyrillique (é, α, Ж)
U+0800 à U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx La plupart des écritures asiatiques, symboles (中, ह, €)
U+10000 à U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Emoji, écritures rares (😀, 𝕳, 𐐷)

Les positions « x » dans les motifs d'octets contiennent les données réelles du caractère. Les bits de tête indiquent combien d'octets le caractère utilise, permettant aux décodeurs de se synchroniser correctement même s'ils commencent à lire en milieu de flux.

Avantages d'UTF-8

La domination d'UTF-8 provient de plusieurs avantages clés :

UTF-8 en pratique

Voyons comment UTF-8 encode différents caractères :

Cette approche à longueur variable signifie qu'un document contenant principalement du texte anglais utilise beaucoup moins d'espace qu'UTF-16 ou UTF-32, tout en supportant la gamme Unicode complète lorsque nécessaire.

Conseil : Spécifiez toujours l'encodage UTF-8 dans vos documents HTML avec <meta charset="UTF-8"> et dans les en-têtes HTTP avec Content-Type: text/html; charset=UTF-8. Cela empêche les navigateurs de deviner incorrectement l'encodage.

UTF-8 vs UTF-16 vs UTF-32 : Choisir le bon encodage

Bien qu'UTF-8 domine le contenu web, UTF-16 et UTF-32 ont leurs propres cas d'usage. Comprendre les différences vous aide à choisir le bon encodage pour vos besoins spécifiques.

UTF-16 : Le juste milieu

UTF-16 utilise 2 ou 4 octets par caractère. Les caractères du BMP (U+0000 à U+FFFF) utilisent 2 octets, tandis que les caractères en dehors du BMP utilisent 4 octets via un mécanisme appelé paires de substitution.

Avantages :

Inconvénients :

UTF-32 : Simplicité à largeur fixe

UTF-32 utilise exactement 4 octets pour chaque caractère, en faisant un encodage à largeur fixe. Chaque point de code correspond directement à un entier 32 bits.

Avantages :

Inconvénients :

Tableau comparatif

Fonctionnalité UTF-8 UTF-16 UTF-32
Octets par caractère 1-4 (variable) 2-4 (variable) 4 (fixe)
Compatibilité ASCII