encoding.bom
Byte Order Mark (BOM) no início do ficheiro
A AT rejeita ficheiros SAF-T que começam com um BOM UTF-8 ou UTF-16.
O que é um BOM
Um Byte Order Mark é uma assinatura de 2 ou 3 bytes no início absoluto de um ficheiro de texto, que sinaliza qual a codificação Unicode usada:
| Codificação | Bytes do BOM |
|---|---|
| UTF-8 | EF BB BF |
| UTF-16 BE | FE FF |
| UTF-16 LE | FF FE |
Porque é que a AT rejeita BOMs
Windows-1252 não tem conceito de BOM. O esquema oficial do SAF-T e o parser de entrada da AT esperam que o primeiro byte do ficheiro seja o < do prólogo XML, não uma assinatura Unicode.
Quando há um BOM, a declaração XML faz parsing, mas o ficheiro é rejeitado à entrada sem mensagem útil.
Como aparece um BOM
- Gravar no Bloco de Notas em Windows ("UTF-8 com BOM" é o padrão).
- Alguns ERPs colocam um BOM ao exportar XML "Unicode-aware".
- Conversão manual do ficheiro por uma ferramenta que adiciona uma assinatura.
Como corrigir
Retire os primeiros 2 ou 3 bytes. O corpo do XML mantém-se igual.
# Linux/macOS, uma linha para BOM UTF-8
sed -i '1s/^\xEF\xBB\xBF//' my.xml
O SAFTCheck retira o BOM automaticamente quando clica em "Corrigir automaticamente e descarregar".
Detetar um BOM
Abra o ficheiro num editor hexadecimal. Os três primeiros bytes devem ser 3C 3F 78 (ou seja, <?x), e não EF BB BF.
Relacionado
- Declaração de codificação XML (Windows-1252) — o requisito mais geral de codificação.