SAFTCheck

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. Nella maggior parte degli editor non si vede, ed è questo che lo rende difficile da trovare:

CodificaByte del BOMCosa significa per un file SAF-T
UTF-8EF BB BFRimuovi i 3 byte; controlla anche la dichiarazione di codifica.
UTF-16 BEFE FFL'intero file è in UTF-16: va convertito, non basta tagliare i byte.
UTF-16 LEFF FECome sopra. Tipico dei file salvati come "Unicode" da strumenti Windows.

Perché l'AT rifiuta i BOM

L'AT si aspetta i file SAF-T (PT) in Windows-1252, che non ha BOM. Lo schema e il parser d'ingresso dell'AT si aspettano che il primo byte del file sia il < della dichiarazione XML, non una firma Unicode.

Quando è presente un BOM, l'XML può comunque aprirsi senza problemi nel browser o nel tuo ERP, ma il file viene rifiutato in ingresso senza un errore utile. Vedi cosa significano i messaggi di errore dell'AT per i messaggi che potresti vedere.

Come dovrebbe iniziare il file

Un file SAF-T (PT) corretto inizia direttamente con la dichiarazione XML:

<?xml version="1.0" encoding="Windows-1252"?>
<AuditFile xmlns="urn:OECD:StandardAuditFile-Tax:PT_1.04_01">

In un editor esadecimale, i primi byte sono 3C 3F 78 6D 6C (<?xml). Con un BOM UTF-8 sono EF BB BF 3C 3F.

Come ci finisce un BOM

  • Aprire l'esportazione in Blocco note e salvarla di nuovo come "UTF-8 con BOM" (il default delle versioni Windows meno recenti) o come "Unicode" (UTF-16).
  • Alcuni ERP e strumenti di reportistica antepongono un BOM quando esportano XML "Unicode-aware".
  • Convertire il file con uno strumento che aggiunge una firma, oppure unire file con uno script che ne scrive una.

Come controllare il tuo file

Guarda i primi tre byte:

# Linux / macOS
head -c 3 my.xml | xxd

# Windows PowerShell
Format-Hex my.xml | Select-Object -First 1

Se vedi EF BB BF, FF FE o FE FF, il file ha un BOM. In alternativa carica il file su SAFTCheck, che fa questo controllo a ogni caricamento.

Come correggere

BOM UTF-8: rimuovi i primi 3 byte; il resto del file resta invariato.

# Linux / macOS
sed -i '1s/^\xEF\xBB\xBF//' my.xml

BOM UTF-16: rimuovere i byte non basta, perché ogni carattere del file occupa 2 byte. Converti l'intero file in Windows-1252, poi assicurati che la dichiarazione riporti encoding="Windows-1252":

# Linux / macOS
iconv -f UTF-16 -t WINDOWS-1252 my.xml > my-fixed.xml

Su Windows senza strumenti da riga di comando: in Notepad++, usa Codifica, poi "Converti in ANSI", e salva. Evita di salvare di nuovo con il Blocco note di Windows, che spesso è proprio il modo in cui il BOM ci è finito.

La soluzione migliore a lungo termine è nelle impostazioni di esportazione dell'ERP, così il file del mese successivo esce già corretto.

Cosa fa SAFTCheck

L'anomalia compare come encoding.bom con la posizione "File offset 0" e il tipo di BOM (UTF-8, UTF-16 BE o UTF-16 LE). "Correggi automaticamente e scarica" rimuove un BOM UTF-8 e converte i file UTF-16 in Windows-1252, insieme a qualsiasi altra correzione di codifica di cui il file abbia bisogno. Il file corretto viene validato di nuovo prima che tu lo scarichi.

Una riga vuota o degli spazi prima di <?xml causano lo stesso tipo di rifiuto silenzioso; la correzione automatica rimuove anche quelli.

Correlato

Altre regole