Advertencia: Nota sin relevancia para el lector casual. Acepto saludos, completos y cervezas.Haciendo unas validaciones de
Schema contra ciertos
XML que estoy recibiendo me enfrenté a un error recurrente:
Invalid byte 2 of 2-byte UTF-8 sequence
Lo peor de todo es que a simple vista no había nada extraño o fuera de lugar en el
XML. Después de realizar algunas pruebas y de buscar en Google, di con la respuesta. Lo que sucede es que se gatilla este error cuando la codificación del archivo no concuerda con lo especificado en la cabecera del XML, ie: si mi cabecera dice
< ?xml version="1.0" encoding="UTF-8"? >
se esperará que el archivo efectivamente este almacenado como
UTF-8.
Dado eso sospeché que el archivo estaba en otra codificación, como por ejemplo WINDOWS-1252, o ISO-8859-1, cambié la definición a ISO, y funcionó sin problemas. El truco para asegurarse de ser consistente con los encodings es:
- O pasar el parámetro -Dfile.encoding=UTF-8 (en mi caso era UTF-8) como parámetro del comando java
- O rescatar los Strings especificando la codificación de caracteres, y guardando los archivos como ByteStreams especificando el encoding.
No en vano dicen que el encoding es uno de los monstruos y pesadillas de los desarrolladores de software.
Referencia: http://www.biglist.com/lists/xsl-list/archives/200702/msg00044.html