Charset & Encoding
Codificação, Segurança & Caracteres
Os dois termos são próximos, mas respondem perguntas diferentes:
- Charset (conjunto de caracteres)
- A tabela que diz qual número representa qual caractere — ex.: no charset UTF-8, "Ã" é um número diferente do que no charset ISO-8859-1.
- Encoding (codificação)
- A regra de como esses números viram bytes de fato gravados ou transmitidos. UTF-8 é ao mesmo tempo um charset e um encoding: representa cada caractere em 1 a 4 bytes.
Quando o encoding declarado não bate com o encoding real dos bytes, o resultado é o famoso mojibake: acentos viram sequências de caracteres estranhas ("SÃO PAULO" exibido como "SÃO PAULO"). É um dos erros mais comuns — e mais silenciosos — em integração fiscal, porque o arquivo abre normalmente, só o conteúdo textual vem corrompido.
Na prática: os schemas de NFe, CT-e e NFS-e atuais exigem UTF-8, mas sistemas legados e exportações de planilha ainda costumam gerar ISO-8859-1/Latin-1 ou Windows-1252 — a diferença entre essas duas últimas está sobretudo em alguns símbolos de pontuação (aspas curvas, travessão). A declaração <?xml version="1.0" encoding="UTF-8"?> no topo do XML e o cabeçalho HTTP Content-Type: application/xml; charset=UTF-8 precisam bater com os bytes reais do arquivo — se um XML é gerado em Windows-1252 mas declarado como UTF-8 (ou vice-versa), o autorizador rejeita ou, pior, aceita com o conteúdo corrompido.
Use o detector de charset para descobrir a codificação real de um arquivo antes de assumir qual ela é.