encoding.declaration
Declaração de codificação XML (Windows-1252)
A AT exige a codificação Windows-1252. Declarações UTF-8 são rejeitadas silenciosamente.
O que a AT exige
Os ficheiros SAF-T (PT) têm de declarar e usar a codificação Windows-1252 (CP-1252). Tanto a declaração no prólogo XML como o conteúdo em bytes têm de corresponder.
<?xml version="1.0" encoding="Windows-1252"?>
Porque é que os ficheiros falham
ERPs estrangeiros e ferramentas modernas usam UTF-8 por defeito. O XML que produzem está bem formado; o esquema valida; o ficheiro passa pela maioria dos validadores. Mas a AT rejeita-o em silêncio à entrada, sem mensagem de erro útil.
A discrepância acontece em duas variantes:
- Declaração diz UTF-8 + bytes são UTF-8 — o ficheiro inteiro está errado do ponto de vista da AT.
- Declaração diz Windows-1252 + bytes ainda são UTF-8 — acontece quando alguém edita à mão apenas o prólogo. Os caracteres acentuados ficam em garbage quando a AT descodifica.
Como corrigir
- Transcodifique o corpo do ficheiro de UTF-8 para Windows-1252.
- Atualize a declaração XML para corresponder:
encoding="Windows-1252".
A ordem importa — mude só a declaração e envia garbage; mude só os bytes e o parser recusa a codificação declarada.
Auto-fix
O SAFTCheck faz os dois passos num clique. O ficheiro corrigido que descarrega tem os mesmos dados, transcodificados byte a byte, com o prólogo reescrito. Caracteres acentuados (ç, ã, é, ó) ficam em bytes únicos na gama 0xA0–0xFF, como as ferramentas da AT esperam.
Verificar a correção
No Linux/macOS, file my.xml deve devolver algo como "Non-ISO extended-ASCII text" ou "ISO-8859 text", e não "UTF-8 Unicode". Num editor hexadecimal, cada byte acentuado deve ser um único byte 0xA0–0xFF, não uma sequência com prefixo 0xC3.
Relacionado
- BOM no início do ficheiro — a outra rejeição silenciosa de codificação.
- Passo a passo: como corrigir o erro de codificação UTF-8 do SAF-T em Portugal