2012-07-22 4 views
6

ようこそすべてUTF-8でInputStreamを読み取る方法は?

私はJavaのアプリケーションを開発しています。これはインターネットからPHPに呼び出され、XML応答を返します。

レスポンスには "Próximo"が含まれていますが、XMLのノードを解析して文字列変数への応答を取得するときに、 "Pr & oacute; ximo" 。

私は問題が私はJavaアプリケーションで別のエンコーディングを使用してPHPスクリプトのエンコーディングを使用していると確信しています。次に、私はあなたのPHP xml、UTF-8と同じエンコーディングを設定する必要があります。

これは私がPHPからXMLファイルを取得するために使用しているコードです。

¿エンコードをUTF-8に設定するには、このコードを変更する必要がありますか? あなたのInputStreamがそれからbyte[]のを読んで取得するとき

 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

あなたはそれがエンコーディングの問題だと確信していますか?ウェブブラウザでPHPコンテンツをテストしましたか?ソースXMLにはエスケープ文字が含まれていると思います! –

+1

あなたはここで別の質問をしました:http://stackoverflow.com/questions/11494069/problems-parsing-spanish-characters-a-e-i-u-from-xml-response 答えは@kgbからです。これはエンコーディングの問題ではありません。 xmlの内容はいくつかのhtmlデータであり、そのデータはエスケープされたようです。あなたはそれをエスケープする必要があります。次のリンクは、HTMLがいくつかの特殊文字をエスケープする方法を示しています。http://www.thesauruslex.com/typo/eng/enghtml.htm –

答えて

7

(私は、入力ストリームを使用しています、buferedリーダーを使用していないことイムに注意してください)。文字列を作成するときは、 "UTF-8"の場合はCharSetを渡します。例:

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

注意、あなたはおそらく、あなたのバッファ(1024のような)いくつかのまともなサイズにしたいとしている、と連続inputStream.read(buffer)と呼ばれます。


@Amir Pashazadeh

はい、あなたはまたにInputStreamReaderを使用して、にパース()の行を変更してみてください:

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

InputStreamReaderはどうですか? –

+0

'InputStream'の先頭をメモリに読み込む必要がないソリューションはありますか?時にはそれはかなり大きいことがあります... –

+0

あなたのソリューションで私のコードを修正することはできません...してください、私はあなたのソリューションで私のPHPのXMLファイルでそれをテストすることができます私のコードを編集できますか? – Pableras84

関連する問題