Pregunta

Nuestra SAXParser no ignora la marca de orden de bytes which aparece al inicio del archivo.

¿Cómo hago para que mi analizador SAX hacer caso omiso de la marca de orden de bytes?

¿Fue útil?

Solución

Parece que se le puede dar entrada UTF-16 a un SAXParser el que no espera que UTF-16. Trate de convertir los datos en UTF-8, que podría ayudar.

Otros consejos

Compruebe el archivo en un editor hexadecimal.

Si los bytes iniciales de hecho se \xEF\xBB\xBF seguidos por el propio documento, entonces es una UTF-8 imitación de lista de materiales. Aunque UTF-8 faux-listas de materiales son una incorrección falta y herramientas que generan ellas necesitan ser destruido con ácido programación especial, la especificación XML hace requiere analizadores reconocer e ignorar esta secuencia de bytes, por lo que si el analizador SAX no que no es compatible y necesita un poco de patadas.

Si los bytes iniciales que le están dando  son en realidad algo así como uno de:

\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\x00\xBB\x00\xBF\x00
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00

a continuación, lo que tienes es una doble codificación accidental. En este caso, es necesario ver el programa que produce el archivo porque no está bien formado, un analizador SAX sería correcto para quejarse, y otros caracteres Unicode en el archivo probablemente estaría en mal estado también. Posiblemente se está haciendo algo tonto como serialising el documento en una cadena de bytes a continuación, enviarlo a través de un ciclo de falsa decodificación / codificación.

De cualquier manera, si es necesario tener el analizador omitir la secuencia de bytes problemático, que tendría que alimentarlo con una versión que le hackeado manualmente para eliminar este prefijo. Sin saber lo que es analizador SAX (o incluso qué idioma) que es difícil decir cómo hacer esto.

Tal vez se puede buscar el flujo de entrada antes de pasarla al analizador? Tal vez se puede leer el archivo en una cadena de bytes y sucedió que, despojado de los bytes iniciales, al analizador? Si el analizador no le da las opciones que tendría que cargar el archivo en bytes como, recortar el principio y guardarla de nuevo en un nuevo archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top