O que é UTF-8
Todo texto em um computador é guardado como números. O Unicode é a lista mestra que dá a cada caractere um número, chamado de code point. A letra A é U+0041, o é é U+00E9 e o símbolo do euro € é U+20AC. O UTF-8 é a regra que transforma esses code points em bytes.
O UTF-8 é a codificação padrão da web, do JSON, da maioria das linguagens de programação e dos sistemas operacionais modernos. A melhor característica dele é que o texto ASCII simples não muda: o A continua sendo o byte único 41. Os outros caracteres usam dois, três ou quatro bytes, e todos esses bytes valem 128 ou mais, então nunca são confundidos com ASCII.
Como usar a ferramenta UTF-8
Codificar. Digite na caixa Texto. Os bytes UTF-8 aparecem na caixa Bytes UTF-8. Clique em Copiar para pegá-los.
Decodificar. Cole os bytes na caixa Bytes UTF-8. Os caracteres aparecem à esquerda. Confira se o Formato dos bytes corresponde ao que você colou.
O Formato dos bytes oferece seis maneiras de escrever os bytes:
- Bytes em hex: C3 A9 para ler e depurar
- Escapes: \xC3\xA9 para strings literais em código
- Percentual: %C3%A9 como nos endereços da web
- Decimal: 195 169 para arrays de bytes
- Binário: 11000011 10101001 para aprender como os bits são organizados
- Texto embaralhado: é (corrigir mojibake) para consertar textos lidos com a codificação errada
Caractere por caractere. A tabela abaixo da ferramenta lista cada caractere com o code point, os bytes UTF-8 e a quantidade de bytes. O resumo mostra o total de caracteres e de bytes. Espaços, tabulações e quebras de linha aparecem com nome, para você conseguir vê-los.
Como o UTF-8 funciona
A quantidade de bytes depende do tamanho do code point:
| Code points | Bytes | Padrão de bits |
|---|---|---|
| U+0000 a U+007F | 1 | 0xxxxxxx |
| U+0080 a U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800 a U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 a U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
O primeiro byte diz quantos bytes vêm depois. Todos os bytes seguintes começam com 10. Isso torna o UTF-8 autossincronizável: um programa sempre consegue encontrar o começo do próximo caractere, mesmo no meio de um fluxo de dados.
Exemplos
| Caractere | Code point | Hex UTF-8 | Decimal |
|---|---|---|---|
A |
U+0041 | 41 |
65 |
é |
U+00E9 | C3 A9 |
195 169 |
ñ |
U+00F1 | C3 B1 |
195 177 |
ß |
U+00DF | C3 9F |
195 159 |
€ |
U+20AC | E2 82 AC |
226 130 172 |
日 |
U+65E5 | E6 97 A5 |
230 151 165 |
| emoji de polegar para cima | U+1F44D | F0 9F 91 8D |
240 159 145 141 |
As letras típicas do português ficam todas na faixa de dois bytes: ã é C3 A3, ç é C3 A7, õ é C3 B5 e ê é C3 AA.
Como consertar o mojibake
Mojibake é a confusão que aparece quando bytes UTF-8 são lidos como Windows-1252 ou Latin-1. Cada byte vira um caractere próprio, então as letras de dois bytes viram dois símbolos estranhos. No Brasil, isso é o famoso problema dos “acentos quebrados”, muito comum em e-mails, sistemas antigos e planilhas:
| Texto correto | Aparece como |
|---|---|
café |
café |
naïve |
naïve |
It’s |
It’s |
€ |
€ |
ação |
ação |
Informações |
Informações |
O formato Texto embaralhado desfaz isso. Ele transforma cada caractere embaralhado de volta no byte original e decodifica os bytes como UTF-8. Se o texto tiver caracteres que não poderiam ter vindo desse erro, a ferramenta avisa em vez de tentar adivinhar.
Dicas e limites
- Salve os arquivos em UTF-8. A maior parte do mojibake começa com um arquivo salvo em uma codificação e aberto em outra. Nos editores, escolha UTF-8 ao salvar.
- Declare a codificação. No HTML, coloque
<meta charset="utf-8">no topo da página. - Excel e arquivos CSV. As versões mais antigas do Excel tentam adivinhar a codificação de um CSV, e o resultado costuma ser acentos quebrados. Salvar como “CSV UTF-8” evita o problema.
- O conserto funciona uma vez. Um texto que foi embaralhado duas vezes precisa do conserto aplicado duas vezes.
- A tabela mostra até 500 caracteres para manter a página rápida. A contagem de bytes sempre cobre o texto inteiro.
Outras formas de fazer isso
Python. 'café'.encode('utf-8') devolve b'caf\xc3\xa9'. Para consertar o mojibake, 'café'.encode('cp1252').decode('utf-8') devolve café.
JavaScript. new TextEncoder().encode('é') devolve os bytes 195 e 169. new TextDecoder().decode(bytes) faz o caminho de volta.
Linha de comando. echo -n é | xxd mostra os bytes c3a9 em um terminal UTF-8. iconv -f WINDOWS-1252 -t UTF-8 converte arquivos inteiros.
Ferramentas relacionadas
Para decodificar bytes hex simples, use a ferramenta de hexadecimal para texto. Os bytes com codificação percentual em links são tratados pela ferramenta de codificar e decodificar URL. Para ver todos os bits, experimente o tradutor de código binário.