# Mojibake

Mojibake (文字化け) est un emprunt lexical au japonais qui signifie que les caractères affichés à l'écran d'un logiciel informatique ne s'affichent pas correctement, à cause d'un problème de codage. En langage courant et face à élément illisible le français dira « je vois des hiéroglyphes ». Ce concept est similaire au concept de krakozyabry (кракозя́бры).

## Histoire

Les problèmes d'encodage de caractères sont apparus dès que des encodages EBCDIC et ASCII sont apparus dans les années 1960.
La mise en réseau de divers matériels électroniques utilisant des conventions différentes pour le codage des caractères a accentué le problème.
Toutefois, avec l'émergence d'Unicode, et celle d'indicateurs d'encodage, le problème pourrait se réduire à un problème d'interopérabilité.

## Étymologie

Le mot japonais 文字化け (mojibake) est composé de 文字 (moji), qui signifie caractère et 化け (bake), provenant du verbe 化ける (bakeru), qui signifie apparaître de manière déguisée, prendre la forme de, changer pour le pire. Littéralement, mojibake signifie donc « changement de caractère ».

## Causes

Le phénomène de mojibake a lieu lorsque le codage des caractères utilisé pour enregistrer un texte est différent de celui utilisé pour l'afficher, parce qu'un logiciel intermédiaire n'a pas effectué la conversion nécessaire.
Ceci est lié à certaines technologies particulières qui ne donnent pas les bonnes informations sur le codage de caractères, ou qui donnent des informations contradictoires, comme aujourd'hui le fichier texte ou le web, même si d'après les RFC, d'autres protocoles ont été concernés dans le passé.

### Cas du web

Dans le cas d'une page web, le codage utilisé peut être spécifié explicitement soit par le biais d'une balise HTML soit par le biais d'un en-tête HTTP, de sorte que le navigateur est capable d'afficher le texte avec le codage dans lequel il a été écrit. Cependant, si cette information est erronée ou absente, ce ne seront pas les bons caractères qui s'afficheront. Par exemple, si le mot « 文字化け » est codé en UTF-8 mais décodé comme de l'ISO/CEI 8859-1, le navigateur affichera les caractères « æ–‡å—åŒ–ã‘ ». Quand le codage n'est pas spécifié explicitement, la plupart des navigateurs modernes utilisent des heuristiques pour tenter de déterminer le codage du texte dans le cas où l'option « détection automatique de l'encodage » est sélectionnée et utilisent le codage par défaut dans le cas contraire.

### Cas du japonais

Le mojibake est un phénomène particulièrement répandu en japonais (ce qui explique la nécessité de créer un mot pour le nommer) car il existe plusieurs codages possibles pour écrire le japonais. En particulier, la famille de l'ISO/CEI 2022 (Shift-JIS, EUC-JP) est plus complexe et éventuellement plus à même de ne pas être prise en charge très correctement par tous les logiciels. UTF-8 est également utilisé. Or, selon le système d'exploitation, le codage par défaut n'est pas le même. Par conséquent, si l'information concernant le codage d'une page est absente, le codage par défaut utilisé pour afficher la page ne sera pas le même. Il en résulte que la page sera mojibake si elle n'est pas affichée sur le même système d'exploitation que celui avec lequel elle a été écrite.
De plus, il est possible que d'autres problèmes d'interopérabilité existent, vu que certains logiciels pourraient ne pas prendre en compte le fait que certaines extensions multi-octet de l'ASCII utilisent des caractères dans la plage ASCII comme octets suivant le premier.

## Solutions

Le problème du mojibake ne se limite cependant pas aux seules pages web. Sous Windows, certaines applications sont dites « Unicode » (application tournant quelle que soit la langue de Windows) et d'autres sont localisées. Si une application japonaise n'est pas Unicode, un utilisateur d'une version française de Windows devra passer le système d'exploitation complet en mode japonais afin de pouvoir la voir correctement. Les applications japonaises deviendront alors lisibles mais les applications françaises non Unicode deviendront à leur tour mojibake.
Il peut aussi arriver de recevoir de courts messages texte en chinois alors que leur expéditeur assure n'avoir rien envoyé. Il ne s'agit souvent pas d'un piratage mais d'un simple accusé de réception mal encodé, par exemple :
* Message texte reçu = 浥獳慧攠⁴漠〱㈳㐵㘷㠹〠獵捣敥摥搮
* Converti en octets dans le codage UTF-16BE = 6D65 7373 6167 6520 2074 6F20 3031 3233 3435 3637 3839 3020 7375 6363 6565 6465 642E
* Formaté en UTF-8 (ajout d'espaces) = 6D 65 73 73 61 67 65 20 20 74 6F 20 30 31 32 33 34 35 36 37 38 39 30 20 73 75 63 63 65 65 64 65 64 2E
* Interprété en tant que caractères en UTF-8 = "message to 01234567890 succeeded."