2012-07-22 8 views
6

Benvenuti tuttiCome leggere un InputStream con UTF-8?

Sto sviluppando un'applicazione Java, che chiama un PHP da Internet che mi sta dando una risposta XML.

Nella risposta è contenuta questa parola: "Próximo", ma quando analizzo i nodi dell'XML e ottengo la risposta in una variabile String, sto ricevendo la parola in questo modo: "Pr & oacute; ximo" .

Sono sicuro che il problema è che sto usando una codifica diversa nell'app Java e quindi la codifica dello script PHP. Quindi suppongo di dover impostare la codifica come nel tuo PHP xml, UTF-8

Questo è il codice che sto usando per ottenere il file XML dal PHP.

¿Cosa devo cambiare in questo codice per impostare la codifica su UTF-8? (nota che non im con lettore di bufered, sto usando flusso di input)

 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

Sei sicuro che sia un problema di codifica? Hai testato il tuo contenuto PHP con un browser web? Penso che l'XML di origine contenga il personaggio evaso! –

+1

hai fatto un'altra domanda qui: http://stackoverflow.com/questions/11494069/problems-parsing-spanish-characters-a-e-i-o-om-xml-response la risposta che c'è da @kgb è ciò che dovresti guardare. questo non è un problema di codifica. sembra che il contenuto dell'XML sia qualche dato html e che i dati siano stati sfuggiti. devi riprenderlo. il seguente link mostra come html sfugge ad alcuni caratteri speciali nelle lingue ufficiali http://www.thesauruslex.com/typo/eng/enghtml.htm –

risposta

7

Quando ottenete il vostro InputStream leggere byte[] s da esso. Quando crei le stringhe, passa su CharSet per "UTF-8". Esempio:

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

nota, probabilmente stai andando a voler rendere il vostro buffer di una certa dimensione sana di mente (come 1024), e continuamente chiamato inputStream.read(buffer).


@Amir Pashazadeh

Sì, è possibile anche utilizzare un InputStreamReader, e provare a cambiare la linea parse() a:

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

Che dire di InputStreamReader? –

+0

Esiste una soluzione che non richiede la lettura dell'intero 'InputStream' in memoria? A volte può essere abbastanza grande ... –

+0

Non riesco a risolvere il mio codice con la tua soluzione ... per favore, puoi modificare il mio codice con la tua soluzione in modo da poterlo testare con il mio file php xml? – Pableras84

Problemi correlati