SAFTCheck
Documentación / encoding
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

  1. Transcodifica el cuerpo del fichero de UTF-8 a Windows-1252.
  2. 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

Otras reglas

Usamos una cookie de sesión para iniciar sesión, una cookie de idioma para la preferencia lingüística y Tawk.to para el widget de chat en vivo (que establece sus propias cookies al abrir el chat). Google Analytics (GA4) se carga solo después de que aceptes, con anonimización de IP; sin rastreadores publicitarios. Consulta nuestra Política de Privacidad.