【问题标题】:Android - displaying UTF-8 (russian) on deviceAndroid - 在设备上显示 UTF-8(俄语)
【发布时间】:2011-06-13 19:29:47
【问题描述】:

我正在我的 android 设备(Motorola Defy,2.1)上调试应用程序,该应用程序从网络获取俄语 HTML 页面,但无法显示。它显示为link text。 HTML 页面采用 UTF-8 格式(100% 确定)。源代码:

HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet("http://m.rasp.yandex.ru/direction?direction=" + direction);
        httpget.setHeader("charset", "utf-8");
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        String html = httpclient.execute(httpget, responseHandler);

正常显示俄语文本需要什么?抱歉英语不好。

【问题讨论】:

    标签: java android unicode utf-8


    【解决方案1】:

    httpget.setHeader("charset", "utf-8"); 没有任何意义。

    编码由BasicResponseHandler 决定。如果Content-Type 标头中未指定响应编码(如您的情况),则BasicResponseHandler 假定它为ISO-8859-1,并且无法配置。

    因此,您需要实现自己的ResponseHandler,该ResponseHandler 回退到另一种默认编码,如下所示:

    ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
        public String handleResponse(final HttpResponse response)
            throws HttpResponseException, IOException {
            StatusLine statusLine = response.getStatusLine();
            if (statusLine.getStatusCode() >= 300) {
                throw new HttpResponseException(statusLine.getStatusCode(),
                        statusLine.getReasonPhrase());
            }
    
            HttpEntity entity = response.getEntity();
            return entity == null ? null : EntityUtils.toString(entity, "UTF-8");
        }
    } 
    

    【讨论】:

      【解决方案2】:

      我想您应该将String html 从 CP-1251 或类似的东西解码为 UTF-8(html.setHeader() - 可能会被忽略)。

      我的建议是复制返回的文本(比如说来自 LogCat)并将其放入 ArtLebedev's decoder。所以你会知道从 Yandex 返回的 HTML 的原始编码。

      【讨论】:

      • 我研究过,操作系统试图在 ISO8859-1 中显示 UTF-8。响应的包含采用 UTF-8 格式 - 它是 100%,带有任何标题。
      猜你喜欢
      • 2011-11-02
      • 2013-12-30
      • 2014-07-24
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2021-05-24
      相关资源
      最近更新 更多