2011-01-07 8 views
2

私はXMLを返すrest WSを呼び出しています。いくつかの要素には、áãçなどの特殊文字が含まれています。 ブラウザから情報を取得すると、その情報はすべて正しく表示されますが、Androidから呼び出すときには適切な特殊文字が表示されません。REST Webサービスを呼び出すときにAndroidでUTF8エンコーディングを行う

お知らせ「復号」と「エンコードされた」変数:私は URLDecoder.decode(result, "UTF-8") を使用する場合、私は(フル、それは予想されるものに URLEncoder.encode(result, "UTF-8")結果の変更を使用する場合、結果は同じ

まま

%記号のうち、%記号と特殊文字を表す数値)。すべてのヘルプは

答えて

12

使用して、このXML文字列を取得するには、サーバーをと仮定するとUTF-8のデータを符号化:私のために働いた

HttpResponse response = client.execute(request); 
... // probably some other code to check for HTTP response status code 
HttpEntity responseEntity = response.getEntity(); 
String xml = EntityUtils.toString(responseEntity, HTTP.UTF_8); 
+0

を、ありがとう! – baekacaek

2

ええとをいただければ幸いです

public void updateDatabaseFromWebservice(){ 

    // get data from webservice 
    Log.i(TAG, "Obtaining categories from webservice"); 

    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(ConnectionProperties.CATEGORIES_URI); 

    ResponseHandler<String> handler = new BasicResponseHandler(); 

    String result = ""; 
    String decoded; 
    String encoded; 
    try {     
     result = client.execute(request, handler); 

     decoded = URLDecoder.decode(result, "UTF-8"); 
     encoded = URLEncoder.encode(result, "UTF-8"); 
     String c = "AS"; 

    } catch (Exception e) { 
     Log.e(TAG, "An error occurred while obtaining categories", e); 
    } 

    client.getConnectionManager().shutdown(); 
} 

は、ここでWebサービスを呼び出すメソッドです。 URLDecoderおよびエンコーダは、XMLコンテンツではなく、URLをエンコードおよびデコードするためのものです。リクエスト時に使用するURLに使用されます。だからコードはちょうど間違っている。

しかし、さらに大きな問題は、コンテンツが実際に解析される必要があるコンテンツである一方で、Stringを取っていることです。パーサーがUTF-8の適切なデコード(エンティティの処理など)を行うためには、リクエストからバイト[]を取得してパーサに渡す方が良いでしょう。 httpクライアントにデコードを依頼することもできますが(サービスが正しくエンコードされていることを前提としていると仮定して、XMLパーザはXML宣言からXMLパーザを理解することができます。

So:URLDecoder/URLEncoderの内容、パーサーXMLを削除し、XMLから必要なデータを抽出します。

関連する問題