Mojibake

Texto em UTF-8 apresentado com ISO-8859-1
Texto em ISO-8859-1 apresentado com UTF-8
Por limitações técnicas, alguns navegadores podem não mostrar alguns caracteres especiais deste artigo.

Mojibake (文字化け, moji caractere + bake mudança, literalmente caracteres fantasmas ou caracteres mudados) é o termo da língua japonesa que se costuma utilizar para descrever o problema de caracteres incorretamente interpretados em sistemas de informática (Conhecido como "trubisco" ou "garatuja" em português). Geralmente os caracteres são substituídos pelo símbolo �.

O Mojibake acontece quando algum programa de computador recebe informação de texto cujos caracteres estão codificados por uma convenção com a qual não sabe lidar. Frequentemente isso acontece porque o programa foi feito antes que se chegasse a um padrão bem aceito para a representação de sinais diacríticos de uma língua estrangeira.

Uma defesa básica contra o problema de Mojibake é escrever ou converter os textos para transcrições romanizadas sem diacríticos (escrevendo, por exemplo, "Voce esta bem" ou "Voce estah bem?" em vez de "Você está bem?"). A desvantagem, é claro, consiste em perda de elegância e possivelmente de clareza no texto.

Entre as línguas mais associadas ao Mojibake incluem-se o japonês, o chinês e o russo (que usa o alfabeto cirílico). Algumas vezes ocorre Mojibake entre duas codificações distintas da mesma língua, como por exemplo EUC-JP e Shift-JIS, ambos feitos para codificar a língua japonesa.

O Mojibake chama-se luan ma (亂碼 ou 乱码 luan4 ma3), ou "código caótico" na língua chinesa.

Exemplo: (文字化け) (a palavra Mojibake em si) pode ser mostrado como •¶Žš‰»‚¯ (é possível que este exemplo não seja mostrado corretamente, dependendo do software exato usado para ver este artigo).

Causas

A tela de inicialização do Windows 1.01 e 2.03 rodando em uma versão incorreta do DOS, exibindo mojibake

Para corretamente reproduzir o texto original que foi codificado, a correspondência entre os dados codificados e a noção de sua codificação deve ser preservada (i.e. a fonte e os padrões de codificação do alvo devem ser iguais). Vendo que isso não ocorre em mojibake, isso pode ser alcançado manipulando os dados em si ou alterando a tag.

Mojibake normalmente é visto com dados de texto que receberam uma tag de codificação errada; podem nem sequer ter uma tag, mas foram movidos entre computadores de codificações padrões diferentes. Uma grande fonte de problemas são os protocolos de comunicação que dependem de configurações em cada computador ao invés de mandar ou armazenar metadados junto dos dados.

As configurações padrões divergentes devem-se em parte as implantações divergentes de Unicode entre famílias de sistemas operativos, e parcialmente as especializações de codificações legadas para sistemas de escrita diferentes em línguas humanas. Enquanto distribuições Linux em maior parte mudaram para UTF-8 em 2004, o Microsoft Windows geralmente usa o UTF-16, e às vezes utiliza páginas de código 8 bits para arquivos de texto em línguas diferentes.

Em alguns sistemas de escrita, como o Japonês, várias codificações têm sido usadas historicamente, fazendo usuários verem mojibake relativamente frequentemente. Como um exemplo, a palavra mojibake em si (文字化け) armazenada como EUC-JP pode ser mostrada incorretamente como ハクサ�ス、ア, ハクサ嵂ス、ア (MS-932), ou ハクサ郾ス、ア se for interpretado como Shift-JIS, ou ʸ»ú²½¤± em softwares que assumem que o texto está em codificações Windows-1252 ou ISO 8859-1, geralmente rotulados de Western ou Western European. Isso é ainda mais agravado se outros locales forem envolvidos: o mesmo texto armazenado em UTF-8 pode aparecer como 譁�蟄怜喧縺� se for interpretado como Shift-JIS, como 文字化け se interpretado como Western, ou (por exemplo) como 鏂囧瓧鍖栥亼 se for interpretado como um locale GBK (China continental.)

Exemplos de mojibake
Texto original 文 字 化 け
Bytes brutos de codificação EUC-JP CAB8BBFAB2BDA4B1
Bytes EUC-JP interpretados como Shift-JIS ハクサ郾ス、ア
Bytes EUC-JP interpretados como GBK 矢机步け
Bytes EUC-JP interpretados como Windows-1252 ʸ»ú²½¤±
Bytes brutos de codificação UTF-8 E69687E5AD97E58C96E38191
Bytes UTF-8 interpretados como Shift-JIS 譁�蟄怜喧縺�
Bytes UTF-8 interpretados como GBK 鏂囧瓧鍖栥亼
Bytes UTF-8 interpretados como Windows-1252 æ–‡åSHY—化ãHOP‘

Ver também

Referências