调用REST webservice时Android中的UTF8编码

调用REST webservice时Android中的UTF8编码,android,encoding,utf-8,decode,encode,Android,Encoding,Utf 8,Decode,Encode,我正在调用返回XML的rest WS。有些元素包含字符串,包括特殊字符,如Ɂç等。。。 当我通过浏览器获取信息时,所有信息都会正确显示,但从Android调用时,我没有获得正确的特殊字符 请注意“解码”和“编码”变量: 当我使用 urldecker.decode(结果,“UTF-8”) 结果保持不变 当我使用 URLEncoder.encode(结果,“UTF-8”)结果将更改为预期的结果(充满%、表示符号和特殊字符的数字) 以下是调用Web服务的方法: public void updateDa

我正在调用返回XML的rest WS。有些元素包含字符串,包括特殊字符,如Ɂç等。。。 当我通过浏览器获取信息时,所有信息都会正确显示,但从Android调用时,我没有获得正确的特殊字符

请注意“解码”和“编码”变量:

当我使用
urldecker.decode(结果,“UTF-8”)
结果保持不变

当我使用
URLEncoder.encode(结果,“UTF-8”)
结果将更改为预期的结果(充满%、表示符号和特殊字符的数字)

以下是调用Web服务的方法:

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();
}
public void updateDatabaseFromWebservice(){
//从webservice获取数据
Log.i(标签,“从webservice获取类别”);
HttpClient=new DefaultHttpClient();
HttpGet请求=新的HttpGet(ConnectionProperties.CATEGORIES\u URI);
ResponseHandler=new BasicResponseHandler();
字符串结果=”;
字符串解码;
字符串编码;
试试{
结果=client.execute(请求、处理程序);
decoded=urldecker.decode(结果为“UTF-8”);
encoded=urlcoder.encode(结果为“UTF-8”);
字符串c=“AS”;
}捕获(例外e){
Log.e(标记“获取类别时发生错误”,e);
}
client.getConnectionManager().shutdown();
}

任何帮助都将不胜感激。URL解码器和编码器用于编码和解码URL,而不是XML内容。它用于发出请求时使用的URL。所以代码只是。。。错

但更大的问题是,您使用的是字符串,而内容实际上是需要解析的XML。为了让解析器正确解码UTF-8(以及处理实体等),最好从请求中获取一个字节[],并将其传递给解析器;尽管要求http客户机进行解码可能可以正常工作(假设服务正确地指示使用的编码;并非所有都可以——但即使不是,XML解析器也可以从XML声明中找到它)


因此:删除URLDecover/URLEncoder内容、解析器XML,并从XML中提取所需数据。

使用此方法获取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);