L'encodage des caractères : ASCII, UTF-8 et les codes QR
Pourquoi un même code QR affiche du texte illisible sur un téléphone et un texte propre sur un autre — l'encodage des caractères, expliqué.
L'encodage des caractères est l'accord invisible qui transforme les lettres que vous tapez en nombres qu'un ordinateur stocke — et lorsqu'un code QR et un scanner ne s'accordent pas sur l'accord qu'ils utilisent, c'est précisément là que vos lettres accentuées et vos émojis se transforment en charabia illisible.
Avez-vous déjà scanné un code QR et vu café ressortir en café ? Ou un émoji devenir une rangée de points d'interrogation ? Vous venez de rencontrer un décalage d'encodage de caractères. C'est l'un des gremlins silencieux les plus courants du monde du QR, et une fois que vous comprenez l'ASCII, le Latin-1, l'UTF-8 et un mécanisme appelé ECI, tout devient logique. Démêlons cela. 🐾
Pourquoi le texte doit devenir des nombres
Les ordinateurs ne stockent que des nombres. Un code QR, au fond, contient un flux de bits — des uns et des zéros — qui se regroupent en octets (des nombres de 0 à 255). Pour stocker la lettre « A », nous convenons d'abord que « A » vaut un certain nombre, puis nous stockons ce nombre. L'encodage des caractères est cet accord : une table de correspondance associant les caractères à des nombres, et inversement. Notre article complémentaire sur comment les ordinateurs représentent le texte couvre les fondamentaux ; ici, nous nous concentrons sur ce que cela signifie pour le QR.
ASCII : les 128 d'origine
L'ASCII est le grand-père des encodages. Il définit 128 caractères — les lettres anglaises majuscules et minuscules, les chiffres, la ponctuation courante et un espace — chacun associé à un nombre de 0 à 127. « A » vaut 65, « a » vaut 97, « 0 » vaut 48, et ainsi de suite. Sept bits suffisent à couvrir les 128.
L'ASCII est simple et universel : tout encodage qui compte aujourd'hui s'accorde avec l'ASCII pour ces 128 premiers caractères. Le hic, c'est ce qui lui manque — pas de lettres accentuées, pas de « £ » ni de « € », pas d'écritures non anglaises, et certainement pas d'émoji. Pour de l'anglais simple, l'ASCII fonctionne parfaitement, et un code QR ne contenant que des caractères ASCII est à peu près aussi sûr et portable que possible.
Latin-1 : combler la seconde moitié
Les octets peuvent contenir des valeurs de 0 à 255, il y a donc de la place pour 128 caractères de plus au-delà de l'ASCII. Le Latin-1 (formellement ISO-8859-1) utilise cette plage supérieure pour ajouter de nombreux caractères d'Europe occidentale : « é », « ñ », « ü », « ç », « £ » et compagnie. Les valeurs 0–127 restent identiques à l'ASCII ; les valeurs 128–255 portent les caractères supplémentaires.
Le Latin-1 compte pour les codes QR parce que c'est l'hypothèse par défaut que font de nombreux scanners en lisant le mode octet. Si les octets d'un code ont été écrits en Latin-1 et lus en Latin-1, le texte accentué d'Europe occidentale ressort parfaitement. Les problèmes commencent quand un côté suppose du Latin-1 et l'autre suppose autre chose.
UTF-8 : un encodage pour les gouverner tous
L'UTF-8 est l'encodage universel moderne, et c'est celui qu'utilise la majeure partie du web. Il peut représenter tous les caractères d'Unicode — chaque écriture, symbole et émoji sur Terre — en utilisant un nombre variable d'octets par caractère :
- Les 128 caractères ASCII utilisent toujours un seul octet (et sont identiques octet pour octet à l'ASCII).
- Les caractères accentués et beaucoup de caractères courants utilisent deux octets.
- Les caractères moins courants utilisent trois octets.
- Les émojis et les symboles plus rares utilisent quatre octets.
Cette rétrocompatibilité avec l'ASCII est géniale : le texte anglais simple est identique en ASCII et en UTF-8. Mais un « é » en UTF-8 fait deux octets, alors qu'en Latin-1 il n'en fait qu'un. Cette seule différence est à la racine de la plupart des textes illisibles en QR.
La lettre « é » fait un octet en Latin-1 mais deux octets en UTF-8. Si un code est écrit d'une façon et lu de l'autre, le décalage apparaît sous forme de charabia comme « é ».
Où se situent les codes QR
Les codes QR ont quatre modes d'encodage, et le texte voyage généralement en mode octet (8 bits par caractère). Le mode octet stocke des valeurs d'octets brutes mais ne dit pas intrinsèquement quel jeu de caractères ces octets représentent. Notre guide sur les modes d'encodage des codes QR couvre les quatre modes ; le point crucial ici est que c'est en mode octet que se pose la question de l'encodage.
Ainsi, quand un générateur encode « café » et qu'un scanner le décode, tous deux doivent s'accorder sur le jeu de caractères. Sinon, vous obtenez du mojibake — le nom technique (et plutôt charmant) du texte décodé illisible.
ECI : déclarer le jeu de caractères
La norme QR a une véritable solution : l'ECI, ou Extended Channel Interpretation (interprétation étendue de canal). L'ECI est un petit marqueur que l'encodeur peut placer dans les données pour dire, en substance, « les octets qui suivent utilisent le jeu de caractères numéro X » — par exemple, l'UTF-8. Un scanner qui comprend l'ECI lit le marqueur et interprète les octets correctement, si bien que « é » et les émojis ressortent comme prévu.
Le hic, c'est que tous les scanners ou générateurs ne gèrent pas parfaitement l'ECI. Quand l'ECI manque, un lecteur doit deviner. Certains supposent du Latin-1 ; d'autres tentent de détecter automatiquement l'UTF-8 ; les résultats varient selon l'application et le téléphone. Cette inconstance explique pourquoi un même code peut paraître correct sur un téléphone et illisible sur un autre.
Pourquoi les émojis et les accents deviennent parfois illisibles
Le mystère se résout de lui-même. Le charabia survient quand l'encodage utilisé pour écrire le code et celui utilisé pour le lire ne correspondent pas. Scénarios courants :
- UTF-8 écrit, Latin-1 lu. Les deux octets d'un « é » en UTF-8 sont lus comme deux caractères Latin-1 distincts, produisant « é ».
- Pas de marqueur ECI. Le scanner devine le jeu de caractères et devine mal.
- Des émojis partout. Les émojis n'existent qu'en Unicode et nécessitent l'UTF-8 ; un scanner supposant du Latin-1 ne peut pas les représenter et affiche des points d'interrogation ou des carrés.
- Vieux scanners. Certains lecteurs plus anciens ne prennent pas bien en charge l'ECI ou l'UTF-8, si bien que tout ce qui dépasse l'ASCII est un pari.
| Encodage | Couvre | Octets par caractère | Notes |
|---|---|---|---|
| ASCII | Lettres anglaises, chiffres, ponctuation de base | 1 (valeurs 0–127) | Universellement sûr |
| Latin-1 | ASCII + accents d'Europe occidentale | 1 (valeurs 0–255) | Valeur par défaut courante en QR |
| UTF-8 | Tous les caractères Unicode + émojis | 1 à 4 | Standard du web ; nécessite l'ECI en QR pour la fiabilité |
Comment éviter les codes QR illisibles
Quelques bonnes habitudes gardent vos codes propres :
- Tenez-vous-en à l'ASCII simple quand vous le pouvez. Les lettres anglaises de base, les chiffres et la ponctuation simple se décodent de façon identique partout. C'est le choix le plus fiable de tous.
- Utilisez un générateur qui ajoute l'ECI pour l'UTF-8. Si vous avez besoin d'accents ou de texte non latin, assurez-vous que l'outil signale l'UTF-8 via l'ECI pour que les scanners conformes l'interprètent correctement.
- Testez sur plusieurs téléphones. Scannez votre code terminé avec deux ou trois appareils différents avant d'en imprimer des milliers d'exemplaires.
- Allez-y doucement sur les émojis. Ce sont les contenus les plus fragiles d'un scanner à l'autre. Charmants quand ils fonctionnent, risqués quand ils échouent.
- Encodez en pourcentage les caractères délicats dans les URL. Pour les liens, l'utilisation de l'encodage d'URL standard pour les caractères spéciaux contourne entièrement de nombreux problèmes.
La vue d'ensemble
L'encodage des caractères est l'une de ces idées fondamentales qui touchent tout ce qui est numérique, pas seulement les codes QR. Si vous souhaitez la version à partir de zéro, nos guides sur comment les ordinateurs représentent le texte et sur les modes d'encodage du QR se marient bien avec celui-ci. Et pour l'anatomie de l'endroit où ces octets vivent réellement dans le carré, voyez l'anatomie d'un code QR.
Lorsque vous créez un code avec QR Puppy, vous n'avez pas à vous soucier de l'encodage — mais savoir ce qui se passe sous le capot vous aide à repérer les ennuis tôt. Prêt à en essayer un ? Vous pouvez créer un code QR gratuit, statique et standard, en quelques secondes.
Questions fréquentes
Pourquoi mon texte accentué se transforme-t-il en symboles bizarres ?
Parce que le code a été écrit dans un encodage (souvent l'UTF-8) et lu dans un autre (souvent le Latin-1). Un « é » en UTF-8 fait deux octets, qu'un lecteur Latin-1 affiche comme deux caractères étranges tels que « é ». Utiliser l'ECI pour déclarer l'UTF-8, ou s'en tenir à l'ASCII simple, permet d'éviter cela.
Un code QR peut-il contenir des émojis ?
Oui, mais prudemment. Les émojis nécessitent l'UTF-8, et le code devrait le signaler avec l'ECI. Même là, certains scanners n'affichent pas bien les émojis, ce qui en fait le contenu le moins fiable. Testez largement avant de compter sur eux.
Qu'est-ce que l'ECI en termes simples ?
L'ECI (Extended Channel Interpretation) est un petit marqueur à l'intérieur du code QR qui indique au scanner quel jeu de caractères les octets utilisent, comme l'UTF-8. Il aide les caractères non anglais à se décoder correctement au lieu de devenir illisibles — à condition que le scanner prenne en charge l'ECI.
Le texte ASCII est-il toujours sûr dans un code QR ?
Concrètement, oui. Les 128 caractères ASCII (lettres anglaises, chiffres, ponctuation de base) correspondent aux mêmes valeurs d'octets en ASCII, en Latin-1 et en UTF-8, si bien qu'ils se décodent de façon identique sur pratiquement n'importe quel scanner. C'est le contenu le plus sûr que vous puissiez utiliser.
L'encodage affecte-t-il la taille de mon code QR ?
Cela peut. L'UTF-8 utilise plus d'octets pour les caractères accentués et les émojis (de deux à quatre chacun) que l'ASCII ou le Latin-1, si bien qu'un texte avec beaucoup de caractères spéciaux produit un code plus grand et plus dense. Consultez notre guide sur la capacité de données pour voir comment la longueur affecte la taille.
Créez un QR code de façon honnête 🐾
Gratuit pour toujours, sans suivi, sans expiration — généré directement dans votre navigateur.