encoding.bom
Byte Order Mark (BOM) all'inizio del file
L'AT rifiuta i file SAF-T che iniziano con un BOM UTF-8 o UTF-16.
Cos'è un BOM
Un Byte Order Mark è una firma di 2 o 3 byte all'inizio assoluto di un file di testo che indica quale codifica Unicode usa il file:
| Codifica | Byte del BOM |
|---|---|
| UTF-8 | EF BB BF |
| UTF-16 BE | FE FF |
| UTF-16 LE | FF FE |
Perché l'AT rifiuta i BOM
Windows-1252 non ha concetto di BOM. Lo schema ufficiale del SAF-T e il parser d'ingresso dell'AT si aspettano che il primo byte del file sia il < del prologo XML, non una firma Unicode.
Quando è presente un BOM, la dichiarazione XML passa il parsing ma il file viene rifiutato in ingresso senza un errore utile.
Come ci finisce un BOM
- Salvare da Blocco note su Windows ("UTF-8 con BOM" è il default).
- Alcuni ERP antepongono un BOM quando esportano XML "Unicode-aware".
- Conversione manuale del file attraverso uno strumento che aggiunge una firma.
Come correggere
Rimuovi i primi 2 o 3 byte. Il corpo dell'XML resta invariato.
# Linux/macOS, una sola riga per BOM UTF-8
sed -i '1s/^\xEF\xBB\xBF//' my.xml
SAFTCheck rimuove il BOM automaticamente quando clicchi su "Correggi automaticamente e scarica".
Rilevare un BOM
Apri il file in un editor esadecimale. I primi tre byte devono essere 3C 3F 78 (ovvero <?x), non EF BB BF.
Correlato
- Dichiarazione di codifica XML (Windows-1252) — il requisito di codifica più ampio.