SAFTCheck
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çãoBytes do BOM
UTF-8EF BB BF
UTF-16 BEFE FF
UTF-16 LEFF 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

Outras regras

Usamos um cookie de sessão para autenticação, um cookie de idioma para a preferência linguística e o Tawk.to para o widget de chat ao vivo (que define os seus próprios cookies quando abre o chat). O Google Analytics (GA4) só é carregado depois de aceitar, com anonimização de IP; sem rastreadores publicitários. Consulte a nossa Política de Privacidade.