Android - отображение UTF-8 на русском языке - PullRequest
0 голосов
/ 22 января 2011

Я отлаживаю приложение на моем устройстве 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);

Что мне нужно для нормального отображения русского текста? Извините за плохое знание английского языка.

Ответы [ 2 ]

15 голосов
/ 23 января 2011

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");
    }
} 
1 голос
/ 23 января 2011

Полагаю, вам следует декодировать String html из CP-1251 или чего-то подобного в UTF-8 (html.setHeader() - при этом игнорировать).

Я бы предложил скопировать возвращенный текст (скажем, из LogCat) и поместить его в декодер АртЛебедева . Таким образом, вы узнаете оригинальную кодировку HTML, возвращенную с Яндекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...