Binaire vers texte : décoder des octets, et savoir quand c’est impossible
Ce que fait cette conversion
Elle lit une suite d’octets binaires et les décode comme du texte UTF-8. Huit bits forment un octet, puis les octets sont décodés ensemble, car un même caractère peut en occuper plusieurs. C’est le décodage qui constitue le vrai travail : les frontières d’octet ne disent rien des frontières de caractère.
Comment un décodeur sait où s’arrête un caractère
Les bits de tête de chaque octet annoncent son rôle. Un octet commençant par 0 est autonome, un octet commençant par 110 ouvre un caractère de deux octets, 1110 en ouvre un de trois et 11110 un de quatre, tandis que les octets de continuation commencent par 10. Cette structure permet à un décodeur de parcourir un flux sans qu’on lui indique où sont les caractères, et c’est aussi elle qui rend détectable un flux coupé au mauvais endroit.
Tableau de conversion du binaire vers le texte
Des séquences d’octets avec le texte qu’elles décodent. Les lignes multi-octets montrent le motif de bits de tête à l’œuvre, et la dernière ligne illustre à quoi ressemblent des octets bruts qui ne sont pas du texte imprimable.
| Binaire | Texte |
|---|---|
| 01000001 | A |
| 01100001 | a |
| 01001000 01101001 | Hi |
| 01001111 01001011 | OK |
| 00110001 00110010 00110011 | 123 |
| 11100100 10111000 10101101 | 中 |
D’où viennent les caractères corrompus
Un texte abîmé signifie presque toujours que les octets ont été décodés avec le mauvais encodage ou coupés au mauvais décalage. Décoder de l’UTF-8 comme un encodage à un octet par caractère transforme un caractère de trois octets en trois symboles sans rapport, et retirer un octet au début décale tous les caractères suivants. Les deux pannes ressemblent à de la ponctuation aléatoire, et toutes deux se diagnostiquent en regardant les octets plutôt que les caractères.
Préservez le découpage en octets
Copiez des groupes complets de huit chiffres. Un collage entamé au milieu d’un octet produit une séquence que le décodeur ne peut pas interpréter, et l’erreur qui suit est exacte mais ne dit évidemment pas où le collage a commencé.
Questions fréquentes
Comment décoder du binaire pour revenir au texte ?
Découpez le binaire en groupes de huit chiffres, considérez chaque groupe comme un octet, puis décodez les octets en UTF-8. La lettre A vaut 01000001, donc un groupe unique donne un caractère unique ; une séquence plus longue donne une chaîne plus longue, certains caractères s’étalant sur plusieurs groupes.
Pourquoi obtenir une erreur au lieu de caractères étranges ?
Parce que la suite d’octets n’est pas de l’UTF-8 valide : elle peut être tronquée, dans le désordre, ou ne pas être du texte du tout. La refuser est un choix délibéré ; l’alternative consiste à substituer des caractères de remplacement, ce qui produit un résultat qui ressemble à un problème de décodage alors que le vrai problème est que ces octets n’ont jamais été du texte.
Puis-je coller du binaire sans espaces entre les octets ?
Oui. Une suite continue dont la longueur est un multiple de huit est découpée automatiquement en octets : un binaire copié depuis une source qui omet les séparateurs se convertit donc sans être reformaté. Les formes espacée et non espacée signifient exactement la même chose.
Que signifie un octet supérieur à 127 pris isolément ?
Qu’il fait partie d’un caractère multi-octets et n’est pas un caractère à lui seul. Un octet isolé dans cette plage n’a pas de sens UTF-8 valide et il est rejeté, ce qui est la bonne réponse : le caractère auquel il appartenait est incomplet.
Cela fonctionne-t-il pour du texte dans n’importe quelle langue ?
Oui, pour tout ce que l’UTF-8 peut représenter, c’est-à-dire pratiquement tous les systèmes d’écriture en usage, alphabets latins accentués, cyrillique, arabe, chinois, japonais, coréen et emoji compris. Une séquence produite par l’outil texte vers binaire de ce site se décodera toujours exactement vers le texte de départ.