簡體   English   中英

Android-在設備上顯示UTF-8(俄語)

[英]Android - displaying UTF-8 (russian) on device

我正在android設備(Motorola Defy,2.1)上調試應用程序,該應用程序從網絡獲取俄語HTML頁面,但無法顯示它。 它顯示為鏈接文本 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);

正常顯示俄語文本需要什么? 對不起,英語知識不好。

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

編碼由BasicResponseHandler確定。 如果未在Content-Type標頭中指定響應編碼(如您的情況), BasicResponseHandler會將其假定為ISO-8859-1 ,並且無法對其進行配置。

因此,您需要實現自己的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");
    }
} 

我想您應該將String html從CP-1251或類似的東西解碼為UTF-8( html.setHeader() -migth被忽略)。

我的建議是復制返回的文本(比如說從LogCat中獲取),然后將其放入ArtLebedev的解碼器中 因此,您將了解從Yandex返回的HTML原始編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM