Detectar automaticamente el encoding de un XML al realizar el parser en java / android

Llevo varios días atascado con un problemita en android y que no conseguía dar con la solución. En una aplicación que estoy haciendo es necesario parsear diferentes xml con SAXParserFactory, los cuales pueden venir con un encoding diferente, siendo imposible saberlo a priori. He estado buscando y buscando durante días hasta que al final he encontrado la solución.

Para detectar el encoding tenemos que utilizar la clase GuessEncodingInputStream (esta está modificada por mí con algunas mejoras), es decir, nos la bajamos y se la añadimos a nuestro proyecto (y esta es la original).

Una vez tengamos la clase en nuestro proyecto tan solo tenemos que consultar el enconding y utilizar el SAXParserFactory para parsearlo utilizando un Reader , más o menos así:

[java]

url = new URL(“Direccion del feed”);

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

ExampleHandler handler = new ExampleHandler();

 

InputStream istream = url.openStream();

InputStream istreamEncoding = new GuessEncodingInputStream(istream);

String encoding = ((GuessEncodingInputStream)istreamEncoding).guess();

 

istream = url.openStream();

Reader isr = new InputStreamReader(istream, encoding);

InputSource is = new InputSource();

is.setCharacterStream(isr);

 

parser.parse(is, handler);

[/java]

 

Mil gracias al autor de nubi que gracias a su open source he podido encontrar la solución. Por supuesto si alguien conoce una forma mejor de hacerlo que no deje de compartirla 🙂

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s