Pular para o conteúdo
Aback Tools Logo

Como Corrigir Mojibake e Erros de Codificação Unicode: Detecção, Reparo e Prevenção

Como corrigir mojibake e erros de codificação Unicode: por que é aparece no lugar de é, as discrepâncias UTF-8/Latin-1 e Windows-1252, o reparo automático no seu navegador, a recuperação de dupla codificação e a prevenção em cada fronteira do sistema.

DH
Tutorials & How-Tos12 min de leitura2,700 palavras

Você copia texto de um banco de dados ou documento e ele aparece assim: "échéance" ou "‘aspas tipográficas’". Isso é mojibake: texto que foi codificado em um conjunto de caracteres e decodificado em outro. Este guia explica exatamente por que isso acontece, como identificar qual discrepância de codificação você está enfrentando e como corrigi-la em segundos com as ferramentas certas.

UTF-8Solução universalCodificação correta para 98% da web
1M+Caracteres UnicodePontos de código do padrão
< 5sTempo de reparoPara a maioria dos textos com mojibake

O que é mojibake?

Mojibake (文字化け) é um termo japonês que significa "transformação de caracteres": descreve o texto embaralhado que aparece quando uma string é interpretada com a codificação de caracteres errada. Em vez de "résumé" você vê "résumé". Em vez de um apóstrofo tipográfico você vê "’". Os caracteres não estão corrompidos no nível de bytes — os bytes estão intactos. O problema é que o software que os lê usa o manual errado para traduzir bytes em caracteres.

O problema da tradução byte-caractere

Toda codificação de caracteres é um mapeamento entre números (bytes) e caracteres. A letra "e" é o byte 0x65 em praticamente todas as codificações. Mas um "é" acentuado é representado de forma diferente dependendo da codificação: em UTF-8 é a sequência de dois bytes 0xC3 0xA9, enquanto em Latin-1 é o byte único 0xE9. Quando um programa lê os bytes UTF-8 0xC3 0xA9 usando regras Latin-1, ele produz dois caracteres separados — Ã e © — em vez do único caractere é. Essa substituição é o mojibake.

  • é vira é — bytes UTF-8 lidos como Latin-1 (o padrão mais comum)
  • ü vira ü — a mesma discrepância para o u com trema alemão
  • ’ (apóstrofo direito) vira ’ — aspas tipográficas UTF-8 mal lidas como Latin-1
  • – (travessão curto) vira – — comum em texto colado do Word ou PDF
  • Caractere de substituição Unicode — um caractere válido foi forçado em um contexto que não consegue representá-lo

Note

Mojibake não é corrupção de dados — os bytes originais geralmente permanecem intactos. Isso significa que o texto geralmente pode ser totalmente reparado se você souber a codificação original e a codificação incorreta com que foi lido. A [Ferramenta de Reparo Unicode e de Codificação](/tools/data/formatters/unicode-and-encoding-repair-tool) trata os padrões mais comuns automaticamente.

Por que ocorrem erros de codificação

Erros de codificação são um problema de fronteiras do sistema. Ocorrem quando o texto cruza uma fronteira — entre um arquivo e um aplicativo, entre um banco de dados e uma API, entre um servidor web e um navegador — e o lado emissor e o receptor discordam sobre qual codificação o texto usa. Em um mundo onde UTF-8 é o padrão universal, esses erros deveriam ser raros. Mas são comuns porque sistemas legados, ferramentas do Windows e certos bancos de dados ainda usam codificações antigas por padrão.

As fontes mais comuns

  • Arquivos CSV do Excel — o Excel salva CSV como Windows-1252 no Windows por padrão, não UTF-8. Ao abrir no Linux ou no Python, os caracteres acentuados se corrompem.
  • Bancos MySQL com charset latin1 — instalações antigas do MySQL usam `latin1` por padrão para os conjuntos de caracteres das colunas. Armazenar dados UTF-8 neles causa mojibake na leitura.
  • Cabeçalhos e corpos de e-mail — clientes de e-mail que não declaram um charset, ou que interpretam mal uma declaração de charset, produzem mojibake nos campos De, Assunto e corpo.
  • Extração de texto de PDF — arquivos PDF incorporam fontes com mapeamentos de glifos personalizados que nem sempre correspondem aos pontos de código Unicode padrão, produzindo saída embaralhada ao copiar.
  • Respostas HTTP sem charset no Content-Type — um servidor que envia `Content-Type: text/html` sem `; charset=utf-8` deixa o navegador adivinhar, e ele frequentemente adivinha errado.

UTF-8 vs Windows-1252 — a discrepância mais frequente

Windows-1252 (também chamado CP1252) é um superconjunto do Latin-1 desenvolvido pela Microsoft para as línguas da Europa Ocidental. Usa um byte por caractere e cobre 256 pontos de código — suficiente para inglês, francês, alemão, espanhol e português. UTF-8 usa um a quatro bytes por caractere e cobre todos os 1,1 milhão de pontos de código Unicode. Quando texto UTF-8 é lido como Windows-1252, as sequências multibyte produzem os característicos padrões de mojibake de dois ou três caracteres. O inverso — texto Windows-1252 lido como UTF-8 — produz caracteres de substituição (□ ou ?) porque os bytes altos isolados não são sequências UTF-8 válidas.

Texto sem metadados de codificação não é texto — é uma sequência de bytes esperando para ser mal interpretada.

- Princípio do Padrão Unicode

Como detectar problemas de codificação

Detectar um problema de codificação geralmente é simples: a aparência visual do mojibake é distintiva o suficiente para identificar o padrão da discrepância. Mas para detecção programática, ou para texto que parece correto mas contém problemas invisíveis, você precisa de técnicas específicas.

Reconhecimento visual de padrões

O diagnóstico mais confiável é o próprio padrão de mojibake. Texto UTF-8 lido como Latin-1 produz um prefixo característico "Ã" seguido de um segundo caractere — por exemplo, é para é, à para à, ü para ü. Pontuação tipográfica do Word ou de editores de texto rico produz sequências começando com †— por exemplo, ’ para ’ e “ para “. Se você vir essas sequências, a solução é recodificar os bytes de Latin-1 de volta para UTF-8.

Detecção programática de codificação

Para arquivos e fluxos de dados em que não é possível ver o conteúdo visualmente, use a biblioteca `chardet` (Python) ou o pacote `jschardet` (Node.js) para autodetectar a codificação a partir dos padrões de bytes. Essas bibliotecas analisam a frequência e a distribuição dos valores de byte para identificar a codificação mais provável. Não são 100% precisas — strings curtas e strings com poucos caracteres não ASCII são mais difíceis de classificar com confiança — mas lidam bem com os casos comuns. Use o Consultor de Caracteres Unicode para inspecionar pontos de código individuais e suas representações de bytes esperadas ao depurar caracteres específicos.

Tip

Em um navegador, você pode detectar a codificação de uma página abrindo o DevTools (F12), indo à aba Network, clicando no documento HTML e olhando o cabeçalho de resposta `Content-Type`. Se estiver `text/html` sem parâmetro de charset, o navegador está adivinhando — o que significa que erros de codificação são possíveis. A correção é adicionar `; charset=utf-8` ao cabeçalho Content-Type e uma tag `<meta charset="UTF-8">` no head do HTML.

Como corrigir mojibake online

A maneira mais rápida de corrigir texto com mojibake é a Ferramenta de Reparo Unicode e de Codificação. Ela roda inteiramente no seu navegador — sem upload para servidor, sem registro — e trata automaticamente as discrepâncias UTF-8/Latin-1 mais comuns, a corrupção de aspas tipográficas e a remoção de caracteres invisíveis.

1

Identifique o padrão da discrepância de codificação

Antes de corrigir o mojibake, identifique com qual discrepância você está lidando. Observe os caracteres embaralhados: se vir sequências é ou ü, o texto é UTF-8 lido como Latin-1. Se vir sequências ’ ou “, o texto contém aspas tipográficas ou pontuação tipográfica corrompida da mesma maneira. Se vir pontos de interrogação ou símbolos □, a codificação estava invertida — bytes não UTF-8 foram forçados em um contexto UTF-8.

2

Cole o texto corrompido na ferramenta de reparo

Abra a Ferramenta de Reparo Unicode e de Codificação e cole seu texto com mojibake no campo de entrada. A ferramenta analisa imediatamente o texto e identifica o reparo mais provável: recodificação de Latin-1 para UTF-8, correção de sequências de aspas tipográficas, remoção de caracteres de largura zero, normalização de formas Unicode ou remoção de marcas de ordem de bytes. A detecção acontece no seu navegador — seu texto não sai do seu dispositivo.

3

Selecione o par de codificações e aplique a correção

Se a detecção automática estiver correta, clique em Reparar para aplicar a correção. Se a seleção automática não corresponder ao seu caso, escolha manualmente a codificação de origem (aquela com que o texto foi lido incorretamente) e a codificação de destino (aquela com que deveria ter sido lido). Para a maioria dos conteúdos web, o par é Latin-1 → UTF-8. Para arquivos CSV do Windows, o par costuma ser Windows-1252 → UTF-8.

4

Copie o texto reparado e verifique

Após o reparo, copie o resultado e cole de volta no seu contexto original — um editor de documentos, uma interface de banco de dados ou um arquivo de código. Verifique se todos os caracteres acentuados, aspas e símbolos especiais são exibidos corretamente antes de salvar ou fazer commit das alterações. Para reparo em massa em um banco de dados, teste o padrão em uma amostra de linhas antes de executar a correção em toda a tabela.

Ferramenta de Reparo Unicode e de Codificação

Corrija mojibake, repare artefatos de codificação, normalize Unicode e remova caracteres invisíveis — grátis, no navegador, sem upload de arquivo.

Open tool

Padrões de mojibake comuns e suas correções

Diferentes discrepâncias de codificação produzem padrões visuais diferentes. Reconhecer o padrão indica tanto a causa quanto a correção certa — qual par de codificações aplicar ou qual operação de reparo executar.

Padrão de mojibakeCaractere originalCausaCorreção
éé (e agudo)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
üü (u trema)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
ÀÀ (a grave)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
’’ (apóstrofo direito)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
““ (aspas duplas esquerda)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
–– (travessão curto)UTF-8 lido como Latin-1Recodificar Latin-1 → UTF-8
’’ (apóstrofo direito)UTF-8 lido como Windows-1252Recodificar Windows-1252 → UTF-8
? ou □Qualquer caractere não ASCIINão UTF-8 em contexto UTF-8Encontrar a codificação original com chardet

O problema da dupla codificação

Uma variante particularmente danosa é o duplo mojibake — quando o texto foi mal codificado duas vezes. Produz sequências como © em vez de ©, ou Æ¢ em vez de ¢. Acontece quando texto já com mojibake é salvo e depois lido com a codificação errada uma segunda vez. O processo de reparo exige duas rodadas de recodificação em ordem inversa. A Ferramenta de Reparo Unicode e de Codificação detecta e trata automaticamente os padrões de dupla codificação mais comuns.

Warning

Não tente corrigir o mojibake fazendo buscar-e-substituir diretamente nas sequências de caracteres embaralhadas. Essa abordagem só funciona para os padrões específicos que você conhece e quebra qualquer uso legítimo desses caracteres. Sempre repare no nível da codificação — recodifique os bytes corretamente — em vez de remendar substituições individuais de caracteres.

Prevenindo erros de codificação

A correção de longo prazo para o mojibake é impor UTF-8 em cada fronteira do seu sistema — armazenamento de arquivos, banco de dados, API e camada web. Estes são os lugares específicos onde as declarações de codificação devem ser explícitas.

Bancos de dados — declare UTF-8 em toda parte

No MySQL e MariaDB, defina o conjunto de caracteres padrão como `utf8mb4` (não `utf8` — o `utf8` do MySQL cobre apenas sequências de 3 bytes e exclui emojis e caracteres Unicode raros). Defina em três níveis: o padrão do servidor no `my.cnf`, o charset do banco de dados e os charsets das colunas individuais. No PostgreSQL, o padrão já é UTF-8 em instalações novas. No SQLite, o texto é sempre UTF-8 por padrão.

sql
-- MySQL: set all levels to utf8mb4
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Arquivos — salve sempre como UTF-8

Ao salvar arquivos de texto, exportações CSV ou arquivos de configuração, escolha sempre UTF-8 como codificação. No VS Code, a codificação aparece na barra de status — clique para alterar. No Excel, exporte CSV usando "CSV UTF-8 (separado por vírgulas)" em vez do padrão "CSV (separado por vírgulas)". Para scripts Python que gravam arquivos, sempre passe `encoding='utf-8'` explicitamente na chamada `open()` em vez de confiar no padrão do sistema. Limpe o texto após colar de fontes externas com o Limpador de Texto de E-mail, que remove caracteres invisíveis e normaliza espaços automaticamente.

APIs e HTTP — declare o charset no Content-Type

Toda resposta HTTP que contenha texto deve incluir uma declaração de charset: `Content-Type: application/json; charset=utf-8` ou `Content-Type: text/html; charset=utf-8`. Sem ela, o cliente adivinha — e clientes HTTP antigos usam Latin-1 por padrão para respostas `text/html`. Para páginas HTML, adicione também `<meta charset="UTF-8">` como primeiro elemento dentro de `<head>`. Para APIs JSON, `Content-Type: application/json` implica UTF-8 segundo a RFC, mas ser explícito elimina a ambiguidade e previne problemas com clientes não conformes.


Checklist de codificação por contexto

  • Arquivos Python: adicione o cabeçalho `# -*- coding: utf-8 -*-` para Python 2; no Python 3 é desnecessário, mas inofensivo
  • Strings de conexão MySQL: inclua `charset=utf8mb4` no DSN — ex.: `mysql+pymysql://user:pass@host/db?charset=utf8mb4`
  • Leituras de arquivo no Node.js: passe `encoding: "utf8"` ao `fs.readFile()` ou use `Buffer.from(data).toString("utf8")`
  • Documentos XML e HTML: sempre inclua `<?xml version="1.0" encoding="UTF-8"?>` e `<meta charset="UTF-8">`
  • Bibliotecas de envio de e-mail: defina `Content-Type: text/plain; charset=utf-8` e `Content-Transfer-Encoding: 8bit` ou `quoted-printable`

Normalização Unicode e caracteres invisíveis

Além da clássica discrepância UTF-8/Latin-1, outros dois problemas de Unicode produzem bugs sutis mais difíceis de detectar: discrepâncias de normalização e caracteres invisíveis. Ambos podem fazer comparações de strings falharem, buscas em banco de dados não encontrarem registros e resultados de busca ficarem incompletos — mesmo quando o texto parece idêntico na tela.

Formas de normalização Unicode

O Unicode permite representar o mesmo caractere visível de várias maneiras. A letra "é" pode ser codificada como um único ponto de código précomposto (U+00E9) ou como a combinação de "e" (U+0065) seguida de um acento agudo combinante (U+0301). Ambas parecem idênticas na tela, mas são sequências de bytes diferentes que falham em comparações de igualdade de strings. É por isso que buscar "résumé" em um banco de dados às vezes não encontra resultados — o texto armazenado usa outra forma de normalização. NFC (Decomposição Canônica seguida de Composição Canônica) é a forma normal recomendada para a maioria dos aplicativos. A Ferramenta de Reparo Unicode e de Codificação normaliza o texto para NFC como parte do processo de reparo.

Caracteres invisíveis e de largura zero

Caracteres de largura zero são pontos de código Unicode que ocupam espaço em uma string mas não renderizam nada visível. Frequentemente inseridos por processadores de texto, aplicativos de chat e operações de copiar e colar de PDFs ou páginas web. Os culpados comuns são o espaço de largura zero (U+200B), o espaço sem quebra de largura zero (U+FEFF, também a marca de ordem de bytes) e vários caracteres de controle bidirecionais de texto (U+200E, U+200F, U+202A-U+202E). Esses caracteres quebram padrões regex, confundem tokenizadores e fazem strings de aparência idêntica serem comparadas como desiguais. Use o Consultor de Caracteres Unicode para identificar pontos de código suspeitos em uma string.

Note

A marca de ordem de bytes (BOM, U+FEFF) é particularmente problemática em arquivos UTF-8. É opcional em UTF-8 (diferente do UTF-16, onde é obrigatória), mas muitos editores a adicionam automaticamente. Quando uma BOM UTF-8 está presente, ela aparece como três bytes (0xEF 0xBB 0xBF) no início do arquivo. Programas que não a esperam a tratam como parte do conteúdo — fazendo o primeiro campo de um CSV aparecer como "nome_da_coluna" em vez de "nome_da_coluna". A ferramenta de reparo remove BOMs automaticamente.

Consultor de Caracteres Unicode

Consulte qualquer caractere Unicode por ponto de código ou nome, ou cole um caractere para identificar pontos de código invisíveis ou suspeitos em seu texto.

Open tool

Key takeaways

  • Mojibake é causado por ler bytes de texto com a codificação errada — mais comumente bytes UTF-8 lidos como Latin-1 ou Windows-1252.
  • O padrão é (para é) é a assinatura diagnóstica do mojibake UTF-8-como-Latin-1 — reconhecer o padrão indica a correção exata necessária.
  • A Ferramenta de Reparo Unicode e de Codificação detecta e corrige automaticamente padrões comuns de mojibake, caracteres invisíveis e problemas de normalização Unicode no seu navegador.
  • Nunca corrija mojibake com buscar-e-substituir em sequências embaralhadas — sempre repare no nível da codificação recodificando os bytes corretamente.
  • Previna erros de codificação declarando UTF-8 explicitamente em cada fronteira do sistema: arquivos, bancos de dados, respostas de API e cabeçalhos HTTP.
  • Caracteres invisíveis (espaço de largura zero, BOM, controles bidirecionais) causam falhas de comparação e de busca mesmo quando o texto parece correto — devem ser removidos programaticamente.
  • Discrepâncias de forma de normalização Unicode (NFC vs NFD) fazem strings de aparência idêntica falharem em comparações de igualdade — normalize para NFC antes de armazenar ou comparar texto.

Perguntas frequentes

Mojibake (from the Japanese 文字化け, "character transformation") is garbled text that appears when text encoded in one character set is decoded using a different one. The most common cause is UTF-8 encoded text being read as Latin-1 or Windows-1252 - for example, the UTF-8 byte sequence for é (0xC3 0xA9) is misread as the Latin-1 characters à and ©, producing "é". It happens in databases, file readers, email clients, APIs, and any system that passes text without preserving encoding metadata.

Paste the corrupted text into the Aback Tools Unicode and Encoding Repair Tool at abacktools.com/tools/data/formatters/unicode-and-encoding-repair-tool. The tool automatically detects the most common mojibake patterns and repairs them - UTF-8 read as Latin-1, smart quotes garbled as multi-character sequences, and other common mismatches. Everything runs in your browser with no data sent to any server. The repaired output is ready to copy back into your document, database, or application.

The most reliable indicator is the presence of multi-byte Latin characters appearing where accented letters or punctuation marks should be. Specific patterns are diagnostic: é = é, ü = ü, è = è, ’ = right single quotation mark, “ = left double quotation mark. If you see these patterns, the text was encoded as UTF-8 and decoded as Latin-1 or Windows-1252. A ? or replacement character (U+FFFD, shown as â or �) indicates the opposite: a non-UTF-8 character was forced into a UTF-8 context.

UTF-8 is a variable-width encoding that can represent every character in the Unicode standard - over 1.1 million code points. It uses 1 to 4 bytes per character. Latin-1 (ISO-8859-1) is a fixed-width, single-byte encoding that covers 256 characters - the basic Latin alphabet plus Western European accented characters. Every Latin-1 character is valid as a sequence of UTF-8 bytes, but not all UTF-8 byte sequences are valid Latin-1. This asymmetry is why UTF-8 to Latin-1 mismatches produce recognisable multi-character mojibake patterns.

CSV encoding errors are extremely common because spreadsheet applications default to different encodings - Excel often saves CSV files as Windows-1252 while Linux and Mac tools expect UTF-8. To fix a CSV with encoding errors, open the file in a text editor that lets you set the encoding (VS Code, Notepad++, or TextEdit) and re-save it as UTF-8. For content-level mojibake already written into cells, paste the affected text into the Aback Tools Unicode and Encoding Repair Tool, repair it, and paste the output back.

Invisible Unicode characters are code points that take up space in a string but render as nothing visible - including zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), byte order mark (U+FEFF), and various other formatting characters. They are commonly pasted into forms and documents from word processors, PDF copy-paste, and messenger apps. They break string comparisons, database lookups, regex matches, and search. The Unicode and Encoding Repair Tool strips them automatically during repair.

Yes, but the approach depends on whether the data is stored incorrectly or just declared incorrectly. If the data is correct UTF-8 bytes but the column is declared as Latin-1, changing the column character set without re-encoding will fix the display. If the bytes themselves are wrong (real mojibake stored in the database), you need to repair the strings - extract the affected rows, run them through a mojibake fixer, and write the corrected strings back. Always test the repair on a copy of the data before running a bulk update.

In Python 3, use the `encode`/`decode` pattern with an error handler to repair mojibake: `garbled.encode('latin-1').decode('utf-8')`. This re-encodes the string back to its original bytes using Latin-1 (reversing the misread), then decodes it correctly as UTF-8. If you are reading a file, set the `encoding` parameter explicitly: `open('file.txt', encoding='utf-8')`. For strings with mixed or unknown encoding, the `chardet` library auto-detects the encoding from byte patterns, which you can then pass to `decode()`.

ShareXLinkedIn