【问题标题】:UTF8 Encoding in Android when invoking REST webservice调用 REST Web 服务时 Android 中的 UTF8 编码
【发布时间】:2011-01-07 19:29:02
【问题描述】:

我正在调用一个返回 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();
}

任何帮助将不胜感激

【问题讨论】:

    标签: android encoding utf-8 decode encode


    【解决方案1】:

    使用它来获取 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);
    

    【讨论】:

      【解决方案2】:

      呃。 URLDecoder 和 encoder 用于编码和解码 URL,而不是 XML 内容。它用于发出请求时使用的 URL。所以代码只是......错误。

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

      所以:移除 URLDecoder/URLEncoder 的东西,解析 XML,并从 XML 中提取你想要的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        相关资源
        最近更新 更多