encoding.bom
Byte Order Mark (BOM) al inicio del fichero
La AT rechaza los ficheros SAF-T que empiezan por un BOM UTF-8 o UTF-16.
Qué es un BOM
Un Byte Order Mark es una firma de 2 o 3 bytes al principio absoluto de un fichero de texto que indica qué codificación Unicode usa:
| Codificación | Bytes del BOM |
|---|---|
| UTF-8 | EF BB BF |
| UTF-16 BE | FE FF |
| UTF-16 LE | FF FE |
Por qué la AT rechaza BOMs
Windows-1252 no tiene concepto de BOM. El esquema oficial del SAF-T y el parser de entrada de la AT esperan que el primer byte del fichero sea el < del prólogo XML, no una firma Unicode.
Cuando hay un BOM, la declaración XML se parsea, pero el fichero se rechaza en la entrada sin un error útil.
Cómo aparece un BOM
- Guardar desde el Bloc de notas en Windows ("UTF-8 con BOM" es lo predeterminado).
- Algunos ERPs anteponen un BOM al exportar XML "Unicode-aware".
- Conversión manual del fichero con una herramienta que añade una firma.
Cómo corregir
Elimina los 2 o 3 primeros bytes. El cuerpo del XML se queda igual.
# Linux/macOS, una sola línea para BOM UTF-8
sed -i '1s/^\xEF\xBB\xBF//' my.xml
SAFTCheck elimina el BOM automáticamente cuando pulsas "Corregir automáticamente y descargar".
Detectar un BOM
Abre el fichero en un editor hexadecimal. Los tres primeros bytes deben ser 3C 3F 78 (es decir, <?x), no EF BB BF.
Relacionado
- Declaración de codificación XML (Windows-1252) — el requisito más amplio de codificación.