Você exporta uma tabela. Abre o CSV. Em vez de "José" vê "José". Em vez de "€" vê "€". Em vez de um travessão vê "â€"".
Bem-vindo ao inferno do encoding.
Este guia explica por que isso acontece e como corrigir — seja exportando manualmente ou construindo ferramentas de extração.
O Que Está Realmente Acontecendo
Codificação de caracteres é como computadores representam texto como bytes. Diferentes codificações usam padrões de bytes diferentes para o mesmo caractere.
O culpado mais comum: UTF-8 interpretado como Latin-1 (ou vice-versa).
UTF-8 usa múltiplos bytes para caracteres não-ASCII. Quando um software lê esses bytes como Latin-1 (codificação de byte único), cada byte se torna um caractere ilegível separado.
| Caractere | Bytes UTF-8 | Lido como Latin-1 |
|---|---|---|
| é | C3 A9 | é |
| € | E2 82 AC | € |
| — | E2 80 94 | â€" |
| ñ | C3 B1 | ñ |
| ã | C3 A3 | ã |
| ç | C3 A7 | ç |
O padrão é consistente: sequências de múltiplos bytes se tornam múltiplos caracteres errados.
Onde o Encoding Quebra
1. A Página de Origem
O site pode declarar uma codificação mas servir outra. Ou não declarar nada, deixando os navegadores adivinharem.
<!-- Declara UTF-8 -->
<meta charset="UTF-8">
<!-- Mas o servidor envia -->
Content-Type: text/html; charset=ISO-8859-1
Quando declarações conflitam, navegadores geralmente acertam. Ferramentas de exportação podem não acertar.
2. O Processo de Exportação
Se sua ferramenta de extração não preserva a codificação, bytes são reinterpretados.
O textContent do JavaScript retorna strings Unicode, o que é seguro. Mas converter para um arquivo requer escolher uma codificação. Se essa escolha estiver errada, a corrupção acontece.
3. A Aplicação que Abre o Arquivo
Você exporta um CSV UTF-8 válido. O Excel abre como Latin-1 porque adivinhou errado. Mesma corrupção, causa diferente.
Por isso o mesmo arquivo fica normal em uma aplicação e quebrado em outra.
Como Diagnosticar o Problema
Reconhecimento de Padrões
Certas corrupções são diagnósticas:
| Você vê | Original era |
|---|---|
| á, é, Ã, ó, ú | á, é, í, ó, ú (acentos) |
| ã, õ | ã, õ (til) |
| ç | ç (cedilha) |
| ä, ö, ü | ä, ö, ü (trema alemão) |
| € | € (Euro) |
| â€" | — (travessão) |
| ’ | ' (apóstrofo tipográfico) |
Se você vê Ã seguido de outro caractere, UTF-8 foi lido como Latin-1.
Verificar os Bytes Brutos
Em Python:
with open('arquivo.csv', 'rb') as f:
print(f.read(100))
Se você vê \xc3\xa9 onde espera "é", o arquivo é UTF-8. Se vê \xe9, é Latin-1.
Verificar o Que a Página Declara
No DevTools do navegador:
document.characterSet // Retorna a codificação real usada
Corrigindo Arquivos Corrompidos
O Truque da Recodificação
Se UTF-8 foi lido como Latin-1 por engano, você pode reverter:
# Ler como Latin-1 (como foi interpretado erroneamente)
with open('corrompido.csv', 'r', encoding='latin-1') as f:
text = f.read()
# Codificar de volta para bytes Latin-1, depois decodificar como UTF-8
fixed = text.encode('latin-1').decode('utf-8')
with open('corrigido.csv', 'w', encoding='utf-8') as f:
f.write(fixed)
Isso só funciona se a corrupção foi uma simples interpretação errada. Corrupção dupla ou encodings misturados são mais difíceis.
Forçar o Excel a Ler UTF-8
O Excel frequentemente ignora UTF-8. Duas alternativas:
Opção 1: Adicionar BOM
Um Byte Order Mark no início do arquivo sinaliza UTF-8:
with open('arquivo.csv', 'w', encoding='utf-8-sig') as f:
f.write(data)
Opção 2: Assistente de Importação
Em vez de dar duplo clique no CSV, use Dados → De Texto/CSV e especifique a codificação UTF-8 manualmente.
Google Planilhas como Intermediário
O Google Planilhas lida com encoding melhor que o Excel. Importe o CSV lá, depois exporte para XLSX. O arquivo Excel preservará os caracteres corretamente.
Prevenindo Problemas de Encoding
Se Você Está Exportando Manualmente
Use ferramentas que lidam com encoding corretamente. O HTML Table Exporter preserva Unicode ao longo de todo o processo de exportação, evitando os erros de conversão que causam mojibake.
Para exportações CSV, se sua ferramenta oferece opções de encoding, escolha UTF-8 com BOM para compatibilidade com Excel.
Se Você Está Construindo Ferramentas de Extração
Sempre seja explícito sobre a codificação:
# Escrevendo CSV
with open('saida.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
# Lendo HTML
response = requests.get(url)
response.encoding = response.apparent_encoding # Auto-detecção
html = response.text
Para JavaScript/extensões de navegador:
// Blob com encoding explícito
const blob = new Blob(['\ufeff' + csvContent], {
type: 'text/csv;charset=utf-8;'
});
O \ufeff é o BOM que ajuda o Excel.
Se Você Está Usando Pandas
# Leitura
df = pd.read_csv('arquivo.csv', encoding='utf-8')
# Escrita com BOM para Excel
df.to_csv('saida.csv', encoding='utf-8-sig', index=False)
Caracteres Especiais Que Causam Problemas
Aspas Tipográficas e Apóstrofos
Processadores de texto convertem aspas retas em curvas:
- ' → ' (U+2019)
- " → " " (U+201C, U+201D)
Esses são multi-byte em UTF-8 e quebram em Latin-1.
Travessão e Meia-Risca
- — (travessão, U+2014)
- – (meia-risca, U+2013)
Comuns em dados financeiros e editoriais.
Espaços Não Quebráveis
Espaço normal é 0x20. Espaço não quebrável é 0xA0 (Latin-1) ou 0xC2 0xA0 (UTF-8).
São invisíveis mas quebram comparações de strings e parsing.
# Normalizar espaços
text = text.replace('\xa0', ' ')
Símbolos de Moeda
€, £, ¥, R$ são todos fora do ASCII e codificam de forma diferente em UTF-8 vs Latin-1.
Referência Rápida
| Problema | Causa Provável | Correção |
|---|---|---|
| Ã seguido de caractere | UTF-8 lido como Latin-1 | Recodificar ou especificar UTF-8 na importação |
| ? ou □ substituindo caracteres | Encoding não suporta o caractere | Usar UTF-8 em todo o processo |
| Excel mostra lixo | Excel adivinhou encoding errado | Usar UTF-8 BOM ou assistente de importação |
| Caracteres invisíveis quebrando dados | Espaços não quebráveis ou chars de largura zero | Normalizar espaços em branco |
A Regra Fundamental
Combine a codificação em cada etapa. Exporte como UTF-8. Abra como UTF-8. Salve como UTF-8.
No momento em que uma etapa usa uma codificação diferente, os caracteres corrompem.
Na dúvida, UTF-8 com BOM é a escolha mais segura para arquivos que vão passar pelo Excel. Para saber quais extensões Chrome lidam melhor com encoding na exportação de tabelas, confira nossa comparação das melhores extensões Chrome para exportar tabelas.
Quer exportações que lidam com encoding corretamente? Saiba mais em gauchogrid.com/pt-br/html-table-exporter ou experimente o HTML Table Exporter grátis na Chrome Web Store.
Top comments (0)