2012-07-22 9 views
6

Bienvenido todo¿Cómo se lee un InputStream con UTF-8?

Estoy desarrollando una aplicación Java, que llama a un PHP de Internet que me da una respuesta XML.

En la respuesta está contenida esta palabra: "Próximo", pero cuando analizo los nodos del XML y obtengo la respuesta en una variable String, recibo la palabra como esta: "Pr & oacute; ximo" .

Estoy seguro de que el problema es que estoy usando una codificación diferente en la aplicación Java y luego la codificación del script PHP. Entonces, supongo que debo establecer la codificación al igual que en su PHP xml, UTF-8

Este es el código que estoy usando para convertir el archivo XML del PHP.

¿Qué debo cambiar en este código para establecer la codificación en UTF-8? (nota que no im utilizando un lector de bufered, estoy usando flujo de entrada)

 InputStream in = null; 
     String url = "http://www.myurl.com" 
     try {        
      URL formattedUrl = new URL(url); 
      URLConnection connection = formattedUrl.openConnection(); 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setAllowUserInteraction(false); 
      httpConnection.setInstanceFollowRedirects(true); 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect();    
      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
       in = httpConnection.getInputStream(); 

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();      
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(in); 
      doc.getDocumentElement().normalize();    
      NodeList myNodes = doc.getElementsByTagName("myNode"); 
+1

¿Seguro que es un problema de codificación? ¿Has probado tu contenido PHP con un navegador web? ¡Creo que el XML fuente contiene el personaje escapado! –

+1

ha hecho otra pregunta aquí: http://stackoverflow.com/questions/11494069/problems-parsing-spanish-characters-a-e-i--from-xml-response la respuesta allí desde @kgb es lo que debería estar mirando. esto no es un problema de codificación. parece que el contenido del xml es algunos datos html, y que se escapó la información. necesitas unescapearlo El siguiente enlace le muestra cómo html escapa de algunos caracteres especiales en lenguajes de escritura http://www.thesauruslex.com/typo/eng/enghtml.htm –

Respuesta

7

Al llegar a su InputStream leer byte[] s de ella. Cuando crees tus cadenas, pasa el CharSet para "UTF-8". Ejemplo:

byte[] buffer = new byte[contentLength]; 
int bytesRead = inputStream.read(buffer); 
String page = new String(buffer, 0, bytesRead, "UTF-8"); 

Nota, lo que probablemente va a querer hacer su búfer cierto tamaño en su sano juicio (como 1024), y de forma continua llamada inputStream.read(buffer).


@Amir Pashazadeh

Sí, también se puede utilizar un InputStreamReader, e intente cambiar la línea de análisis() para:

Document doc = db.parse(new InputSource(new InputStreamReader(in, "UTF-8"))); 
+0

¿Qué pasa con InputStreamReader? –

+0

¿Existe alguna solución que no requiera leer toda la información inicial de 'InputStream' en la memoria? A veces puede ser bastante grande ... –

+0

No puedo arreglar mi código con tu solución ... por favor, ¿puedes editar mi código con tu solución para que pueda probarlo con mi archivo php xml? – Pableras84

Cuestiones relacionadas