encoding.declaration
Declaración de codificación XML (Windows-1252)
La AT exige la codificación Windows-1252. Las declaraciones UTF-8 se rechazan silenciosamente.
Qué exige la AT
Los ficheros SAF-T (PT) deben declarar y usar la codificación Windows-1252 (CP-1252). Tanto la declaración en el prólogo XML como el contenido en bytes deben coincidir.
<?xml version="1.0" encoding="Windows-1252"?>
Por qué fallan los ficheros
Los ERPs extranjeros y las herramientas modernas usan UTF-8 por defecto. El XML que producen está bien formado; el esquema valida; el fichero pasa la mayoría de validadores. Pero la AT lo rechaza en silencio a la entrada, sin un mensaje de error útil.
La discrepancia se presenta en dos variantes:
- La declaración dice UTF-8 + los bytes son UTF-8 — el fichero entero está mal desde el punto de vista de la AT.
- La declaración dice Windows-1252 + los bytes siguen siendo UTF-8 — ocurre cuando alguien edita a mano solo el prólogo. Los caracteres acentuados se ven como basura cuando la AT decodifica.
Cómo corregir
- Transcodifica el cuerpo del fichero de UTF-8 a Windows-1252.
- Actualiza la declaración XML para que coincida:
encoding="Windows-1252".
El orden importa — cambia solo la declaración y envías basura; cambia solo los bytes y el parser rechaza la codificación declarada.
Auto-fix
SAFTCheck hace ambos pasos en un solo clic. El fichero corregido que descargas contiene los mismos datos, transcodificados byte a byte, con el prólogo reescrito. Los caracteres acentuados (ç, ã, é, ó) se convierten en bytes únicos en el rango 0xA0–0xFF, como esperan las herramientas de la AT.
Verificar la corrección
En Linux/macOS, file my.xml debería devolver algo como "Non-ISO extended-ASCII text" o "ISO-8859 text", no "UTF-8 Unicode". En un editor hexadecimal, cada byte acentuado debe ser un único byte 0xA0–0xFF, no una secuencia con prefijo 0xC3.
Relacionado
- BOM al inicio del fichero — el otro rechazo silencioso de codificación.
- Guía paso a paso: cómo corregir el error de codificación UTF-8 del SAF-T en Portugal