Advertencia. Artículo con contenido técnico.
Resumen
Los programadores de la SAT no están manejando adecuadamente los archivos .XML y eso genera un problema. Este es el problema: el contenido del archivo está codificado ANSI pero la definición del XML dice que es UTF-8.
Los Archivos XML Enviados por la SAT Generan Error
El estándard para manejo de archivos XML indica que la primera línea debe contener un texto similar a la que traen los archivos de FEL enviados por la SAT que dice que el encoding es UTF-8
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Nos interesa “encoding” que se refiere a cómo se guardan los caracteres dentro del archivo.
Dicho de otra manera Qué caracteres pueden venir en el archivo y cómo están representados
El Error se Genera
Cuando los datos en base a los que se hizo la FEL contienen caracteres “no estándard”, por ejemplo las letras tildadas, la eñe.
El archivo que la SAT está mandando dice que es UTF-8 pero ellos no lo están generando como UTF-8, y los sistemas de XML que son muy estrictos no lo aceptan. Así es el XML, estricto.
Por eso no lo acepta Diamante Contador y tampoco los archivos específicos para XML como XML Copy, o Notepad++ con plugin de XML
La SAT está mandando el archivo en codificación ANSI, pero le pone en la primera línea que es UTF-8 por lo cual no puede ser interpretado.
Tecnicismos de Programación
Hay diferentes "encoding "
<?xml version='1.0' encoding='US-ASCII' ?>
<?xml version='1.0' encoding='ISO-10646-UCS-2’?>
<?xml version='1.0' encoding='ISO-8859-1’?>
<?xml version='1.0' encoding='Shift-JIS’?>
Ejemplo de Codificaciones: las Letras á y Á
En algunos sistemas de codificación se necesita escribir mas de un byte para representar un caracter que estamos acostumbrados a ver como único.
Caracter | ANSI | UTF-8 |
á | 225 | 195,161 (Hexadecimales c3,a1) |
Á | 193 | 195,129 (Hexadecimales c3,81) |
Un archivo con solo un caracter: la letra Á
Si es generado en ANSI va a tener una longitud de 1 byte
Si es generado en UTF-8 va a tener una longitud de 2 bytes. (En realidad tienen unos mas)
Y lo mas importante: quien va a leerlo, tiene que saber “cómo estaba pensando el que lo escribió”
En otras palabras, qué sistema de codificación utilizó.
Si lee el archivo del párrafo anterior que fue grabado UTF-8 y cree que es ANSI leerá dos caracteres.
Si lee el archivo del párrafo anterior que fue grabado en ANSI y cree que es UTF-8 no podrá interpretarlo.
Esta es la imagen de los bytes recibidos en un archivo de la SAT
para un apellido “GONZÁLEZ” con A tildada.
He dejado el cuadrito negro para señalar la primera letra del nombre G
El quinto byte es el hexadecimal c1 (decimal es 193)
que corresponde un Á en codificación ANSI que no coincide con UTF-8 que dice el archivo al principio.