What encoding turns 测试 into 娴嬭瘯?
UTF-8 → GBK Bytes UTF-8 lidos como GBK. Os seis bytes UTF-8 (E6 B5 8B E8 AF 95) são reagrupados em três caracteres GBK.
Cole o texto corrompido e recupere o original. Toda cadeia de codificação plausível — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — é testada e ordenada, com a cadeia exata à vista. Grátis, roda no navegador.
Cole o texto corrompido. Toda cadeia de codificação plausível é testada e os resultados são ordenados — você não precisa saber qual codificação estragou o texto.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
Veja o mesmo texto como bytes em todas as codificações comuns de uma vez — útil quando você precisa saber exatamente o que o seu banco de dados ou protocolo vai armazenar.
| Codificação | Bytes | Hex |
|---|---|---|
| UTF-8 | 6 | E4 B8 AD E6 96 87 |
| GBK | 4 | D6 D0 CE C4 |
| GB18030 | 4 | D6 D0 CE C4 |
| Big5 | 4 | A4 A4 A4 E5 |
| Shift_JIS | 4 | 92 86 95 B6 |
| EUC-KR | 4 | F1 E9 D9 FE |
Desenvolvido e verificado pela equipe de engenharia da Go Tools.
UTF-8 → GBK Bytes UTF-8 lidos como GBK. Os seis bytes UTF-8 (E6 B5 8B E8 AF 95) são reagrupados em três caracteres GBK.
UTF-8 → Windows-1252 Os mesmos bytes UTF-8 lidos como Windows-1252. Como essa codificação é de byte único, cada um dos seis bytes vira um caractere próprio.
Irrecuperável Não. Aqueles bytes foram descartados na hora da decodificação. Recupere o que der do texto ao redor e volte à origem para o resto.
3 vs 2 bytes Três em UTF-8, dois em GBK e Big5. Essa diferença é uma fonte comum de truncamento quando uma coluna é dimensionada em bytes e não em caracteres.
Mojibake é o que se obtém quando um texto é escrito com uma codificação de caracteres e lido com outra. Os bytes estão intactos; só a interpretação está errada. Essa distinção é a razão inteira de a recuperação ser possível: se você descobre qual codificação escreveu os bytes e qual os leu errado, dá para rodar o engano ao contrário e recuperar o texto original.
A palavra é japonesa — 文字化け, algo como "transformação de caracteres" — e virou o termo padrão também em outras línguas porque o problema era endêmico na computação japonesa muito antes do Unicode. Textos em chinês, japonês e coreano sofrem com isso bem mais do que os de escrita latina, por um motivo estrutural: esses idiomas precisam de codificações multibyte, e as codificações multibyte discordam entre si sobre como agrupar os bytes. Uma string de escrita latina costuma ser ASCII puro, e toda codificação concorda quanto ao ASCII.
A recuperação falha em exatamente uma situação. Quando um decodificador encontra bytes sem significado na sua codificação, ele não os guarda — coloca U+FFFD no lugar e joga os originais fora. Esses caracteres estão perdidos para sempre. Todo o resto é reversível.
// The mistake, in three lines of JavaScript
const bytes = new TextEncoder().encode('测试'); // UTF-8: E6 B5 8B E8 AF 95
new TextDecoder('gbk').decode(bytes); // '娴嬭瘯' ← mojibake
new TextDecoder('windows-1252').decode(bytes); // '测试' ← same bytes, other mistake Cole o texto corrompido e a ferramenta enumera as cadeias por você. Toda combinação de "escrito como" e "lido como" entre UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 e Windows-1251 é testada.
Um candidato só é marcado como Exata quando levá-lo de volta pela mesma cadeia reproduz a sua entrada caractere por caractere. Isso é uma verificação determinística — um palpite ordenado não diria em quais resultados você pode confiar.
Cada candidato nomeia a codificação que escreveu os bytes e a que os leu errado. É disso que você precisa para corrigir a origem, em vez de reparar as mesmas strings de novo na semana que vem.
Se a entrada já contém caracteres de substituição, a ferramenta diz isso com todas as letras e marca todos os candidatos como parciais. Informação destruída na hora da decodificação não volta, e fingir o contrário desperdiça a sua tarde.
Veja qualquer texto como bytes hexadecimais em todas as codificações suportadas, lado a lado, e decodifique hex bruto no sentido inverso. Útil para dimensionar colunas, ler capturas de pacotes e conferir o conteúdo de BLOBs.
A decodificação usa o TextDecoder do próprio navegador. Não há upload, nem armazenamento, nem reescrita de URL — o que importa porque texto corrompido costuma vir direto da produção.
娴嬭瘯
测试
Os dois caracteres chineses foram gravados corretamente em UTF-8 (bytes E6 B5 8B E8 AF 95) e depois um programa leu esses seis bytes como GBK. O GBK agrupa os bytes de dois em dois, então produziu três caracteres em vez de dois. É o que se obtém quando um arquivo UTF-8 é aberto por um aplicativo Windows legado, ou quando o charset da conexão do banco está definido como gbk enquanto os dados são UTF-8.
测试
测试
Os mesmos bytes, outro engano. Windows-1252 é de byte único, então cada um dos seis bytes UTF-8 virou um caractere próprio. Os idiomas de escrita latina caem nesta versão o tempo todo: café vira café, naïve vira naïve. Os sinais denunciadores são Ã, Â, â e pontuação avulsa aparecendo aos pares.
B2 E2 CA D4
测试
Às vezes você não está olhando para texto corrompido, e sim para um dump hexadecimal vindo de uma captura de pacotes ou de uma coluna BLOB. Cole o hex na segunda seção e escolha a codificação. B2 E2 CA D4 é 测试 em GBK — os mesmos dois caracteres ocupam seis bytes em UTF-8 (E6 B5 8B E8 AF 95) e não podem ser representados em Windows-1252.
鏁版嵁搴�
(apenas parcial)
数据库 foi gravado em UTF-8 e lido como GBK, mas o último par de bytes não tinha significado em GBK, então o decodificador o substituiu por U+FFFD. Aquele byte se foi. A ferramenta sinaliza isso em vez de chutar em silêncio — você ainda recupera 数据 do início da string, mas o último caractere é irrecuperável e é preciso voltar aos dados de origem.
Jogue direto na caixa — não precisa identificar a codificação antes. Um fragmento curto basta; uma dúzia de caracteres costuma fixar a cadeia.
Exata significa que a cadeia volta à sua entrada sem diferença nenhuma. Parcial significa que não volta, então trate o resultado como pista.
Cada candidato mostra em qual codificação o texto foi realmente escrito e qual o leu errado. Isso diz o que corrigir lá na origem, não só o que o texto dizia.
A segunda seção mostra qualquer texto como bytes em todas as codificações comuns e decodifica hex bruto no sentido inverso. Use para dimensionar colunas ou conferir quadros de protocolo.
Se uma string aparece corretamente e mesmo assim você a converte, cria o mojibake que estava tentando evitar. Confira a exibição primeiro, e note que fonte faltando renderiza como quadrados (□□□), enquanto um problema de codificação renderiza como caracteres errados.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# Confirme antes qual é a codificação atual file -I correct.txt # charset=utf-8 → nada a converter
Mudar o charset declarado de uma coluna MySQL não recodifica os bytes que ela guarda. Declarar dados latin1 como utf8 faz o servidor devolver bytes que não são UTF-8 válido, e o driver os substitui por U+FFFD — o que os destrói.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- Passe por um tipo binário para os bytes serem preservados, não reinterpretados ALTER TABLE t MODIFY c VARBINARY(255); ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
Um candidato marcado como Parcial não fechou a ida e volta. É uma pista que vale seguir, não uma resposta para colar de volta no seu banco de dados. Se nada vier como Exata, a entrada provavelmente já perdeu informação — volte aos bytes de origem.
// Pega o primeiro candidato, diga o selo o que disser db.update(row.id, candidates[0].text);
// Só grave de volta o que fecha a ida e volta if (candidates[0].lossless) db.update(row.id, candidates[0].text);
Chamar encode em algo que já é bytes, ou decode em algo que já é string, levanta exceção no Python 3 em vez de fazer em silêncio uma ida e volta pelo ASCII. Decodifique os bytes uma vez, na fronteira, e daí em diante trate texto como texto.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # Decodifique uma vez na fronteira, com a codificação que o arquivo realmente usa
with open(path, encoding='gbk') as f:
text = f.read() VARCHAR(50) num bug de truncamento.TextDecoder do navegador fornece as tabelas. Codificar no sentido inverso é mais complicado, porque o TextEncoder só suporta UTF-8 — então a ferramenta constrói um mapa reverso percorrendo o espaço de bytes e perguntando ao decodificador o que cada sequência significa. O mapeamento fica, portanto, sempre coerente com o comportamento do próprio navegador, e nenhuma tabela de consulta é enviada ao seu dispositivo.Content-Type do HTTP, chamadas de abertura de arquivo, exportações de CSV. Todo ponto que assume "a codificação do sistema" é um ponto onde o mesmo bug volta quando o código muda de máquina.utf8 do MySQL guarda no máximo três bytes por caractere, então emojis e alguns caracteres chineses mais raros são truncados em silêncio. O utf8mb4 é UTF-8 de verdade. Essa falha é diferente do mojibake e a ferramenta de recuperação não ajuda, porque aí os bytes realmente se foram.U+FFFD (exibido como �) no lugar e os descarta. Isso é com perda e irreversível. Se o seu texto contém �, aqueles caracteres específicos se foram, não importa a ferramenta que você use. Esta página avisa isso em vez de produzir um palpite com cara de certeza. iso-8859-1 e latin1 como rótulos de windows-1252. Os dois só divergem na faixa 0x80–0x9F, onde o ISO-8859-1 de verdade tem caracteres de controle e o Windows-1252 tem pontuação imprimível, como o travessão e as aspas curvas. Como são justamente esses caracteres imprimíveis que aparecem no mojibake, o Windows-1252 é o mais útil dos dois e esta ferramenta o lista uma única vez sob os dois nomes. TextDecoder embutido nele, e nada é enviado pela rede, gravado em armazenamento ou acrescentado à URL. Isso importa mais do que o normal nesta ferramenta específica: texto corrompido quase sempre vem de um log de produção, de um registro de cliente ou de um dump de banco de dados — exatamente o tipo de coisa que você não deveria colar numa ferramenta que roda no servidor. iconv -f GBK -t UTF-8 input.txt > output.txt no macOS ou no Linux, ou Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt no PowerShell. Cole aqui uma linha representativa primeiro para descobrir quais codificações nomear no comando — errar a direção num arquivo inteiro é como problemas de uma linha viram problemas de mil linhas. Codificação e Formatação
A tabela ASCII completa: 128 caracteres em decimal, hexadecimal, octal e binário, mais um conversor texto ↔ ASCII. Cada caractere de controle traz seu escape, sua notação caret e onde você o encontra.
Codificação e Formatação
Decodifique e codifique Base64 online gratuitamente. Conversão em tempo real com suporte completo a UTF-8 e emoji. 100% privado — executa no seu navegador. Sem necessidade de cadastro.
Codificação e Formatação
Decodifique uma string Base64 ou data URI de volta para imagem no navegador. Pré-visualize, leia dimensões e MIME, e baixe como PNG, JPG, GIF, SVG. Sem upload.
Codificação e Formatação
Converta CSV para JSON no navegador. RFC 4180, inferência de tipos, cabeçalho, seguro para inteiros grandes. 100% privado, sem upload.
Codificação e Formatação
Cole um arquivo .env e obtenha JSON na hora. Suas senhas, chaves de API e tokens nunca saem do navegador — 100% privado, sem upload, analisador dotenv grátis.
Codificação e Formatação
Decodifique entidades HTML e faça unescape de HTML online — grátis, sem cadastro, 100% no seu navegador. Converte referências nomeadas, decimais & hex de volta em caracteres; nada é enviado.