Também disponível em: English · Español · Français · العربية
Corrigir caracteres estranhos no texto (mojibake)
Conserta o texto que foi escrito em UTF-8 e lido pela tabela errada, e mostra exatamente o que mudou.
O que é mojibake?
Um arquivo guarda bytes. Uma codificação de caracteres é o acordo que transforma esses bytes em letras, e mojibake é o que aparece quando quem escreve e quem lê usam acordos diferentes. O texto foi escrito em UTF-8, onde é são os dois bytes C3 A9, e algo o leu de volta por uma tabela de um byte na qual esses dois bytes são duas letras separadas: Ã e ©. Nada se corrompeu no caminho. Os bytes estão intactos e estão sendo lidos pelo manual errado.
É por isso que o estrago é tão reconhecível. Ã, Â, â e € se acumulam na frente das letras acentuadas, um apóstrofo vira ’ e um travessão vira –. Depois que você conhece o formato, dá para ler: ’ é sempre uma aspa simples direita vista através do Windows-1252.
Isso também significa que o conserto é exato, e não um palpite. Se os bytes sobreviveram, devolver cada caractere ao byte de onde veio e ler esses bytes como UTF-8 recupera o texto original — não algo parecido, o original. Nos 1.112.032 pontos de código que o Unicode pode atribuir, essa ida e volta pelo Windows-1252 dá certo todas as vezes.
Como corrigir
- Cole o texto quebrado. Funciona melhor um campo, um nome ou uma linha de cada vez. Cada linha é consertada por conta própria, então um documento com uma coluna quebrada e onze boas não é problema.
- Leia o resultado e depois os pares abaixo dele. Cada caractere do resultado aparece ao lado dos caracteres exatos que substituiu. Se é virou é e ’ virou um apóstrofo, o conserto está certo. Se houver nessa lista algo que você queria manter, não está.
- Copie de volta. Se nada for consertado, o painel diz qual dos dois motivos se aplica: o texto já está limpo, ou nenhuma tabela dá conta de todos os seus caracteres.
Por que esta ferramenta recusa mais do que as outras
Uma ferramenta de conserto tem uma falha da qual ninguém fala: reescrever texto que nunca esteve quebrado. É pior do que não fazer nada, porque o resultado parece plausível e quem lê não tem motivo para conferir.
A medição é fácil de rodar, e este site tem 19.655 linhas de prosa correta em espanhol, português, francês e árabe nas próprias páginas. Com o ftfy, a implementação de referência sobre a qual todo mundo constrói, a função mais óbvia reescreve 2.514 delas — 12,8 por cento — porque também endireita as aspas tipográficas, o que não tem nada a ver com codificação. A função cuidadosa reescreve cinco. Quatro dessas cinco são o mesmo parágrafo explicando o que é uma codificação de caracteres, em quatro idiomas, porque esse parágrafo cita o mojibake que está descrevendo. A quinta é uma frase em português sobre a letra Ã.
Esta ferramenta não reescreve nenhuma, por um motivo estrutural: ela conserta a linha inteira de uma vez. Cada caractere precisa corresponder a um byte e toda a cadeia de bytes precisa ser UTF-8 válido, então uma única letra genuinamente acentuada em qualquer outro ponto da linha veta o conserto. Na frase francesa, as palavras là où contribuem com os bytes E0 20, que nenhuma sequência UTF-8 pode ser, e a linha fica como está.
O preço é real e vale conhecer. Se o seu mojibake sofreu outro dano depois — um espaço inseparável achatado em espaço comum por um servidor de e-mail, por exemplo — a conta de bytes deixa de fechar e esta ferramenta recusa onde uma mais permissiva chutaria. Cole um trecho menor e muitas vezes funciona.
Limites honestos
Só são testadas tabelas de um byte. Vinte e sete por padrão, mais o Mac Roman atrás de uma caixa de seleção. O Mac Roman fica de fora por um motivo medido, não por palpite: ele põe o apóstrofo tipográfico num byte que abre uma sequência UTF-8, então um francês comum como l’échelle parece mojibake válido, e é a única das vinte e oito tabelas que dispara em prosa que nunca esteve quebrada.
Nem toda tabela pode ser desfeita. Dezenove das vinte e oito atribuem os 256 bytes, e o mojibake que passa por elas é sempre reversível. As outras nove deixam bytes sem atribuição — a ISO-8859-6 deixa 45 — e um byte que caiu num desses foi substituído quando o texto foi lido pela primeira vez, ou seja, já se perdera antes de chegar aqui. O painel diz em qual dos casos você está.
Às vezes mais de uma tabela explica o mesmo texto e elas discordam. A leitura mais provável é a mostrada e as outras são listadas em vez de escondidas, porque o texto sozinho não diz qual é a certa. Mojibake latino costuma ser explicado igualmente por uma dúzia de tabelas; mojibake cirílico normalmente por exatamente uma.
Um caractere exige cuidado mesmo quando todo o resto funciona. Uma marca de ordem de bytes no início da linha, U+FEFF, é apagada por qualquer decodificador UTF-8 a menos que se peça explicitamente para mantê-la. Aqui se pede, e é uma diferença de uma linha que quase toda implementação esquece.
Por fim, nenhuma ferramenta distingue um exemplo citado de um estrago real. Uma página sobre mojibake contém mojibake de propósito. É por isso que as mudanças aparecem emparelhadas em vez de serem aplicadas em silêncio.
Por que é grátis?
Tudo acontece no seu navegador. As tabelas de caractere para byte não viajam com a página: são lidas do próprio decodificador do seu navegador, byte a byte, o que não custa nada e faz com que a resposta seja o que o seu navegador realmente entende por cada tabela.
Nada é enviado. Não há servidor a pagar, então não há cadastro, nem limite, nem marca d’água.