调用REST Web服务时在Android中进行UTF8编码

Mig*_*iro 2 encoding android encode decode utf-8

我正在调用一个返回XML的rest WS.一些元素的字符串包括特殊字符,如áãç等...当我通过浏览器获取信息时,所有这些都显示正确,但是当从Android调用它时,我没有得到正确的特殊字符.

注意'解码'和'编码'变量:

当我使用时 URLDecoder.decode(result, "UTF-8") 结果保持不变

当我使用时 URLEncoder.encode(result, "UTF-8")结果更改为预期的结果(%的符号和数字表示符号和特殊字符).

这是调用webservice的方法:

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();
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

Vit*_*nko 12

假设服务器以UTF-8编码数据,使用此方法获取xml字符串:

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);
Run Code Online (Sandbox Code Playgroud)