Неанглийские символы неправильно декодируются на Android с помощью HtlmCleaner - PullRequest
2 голосов
/ 20 января 2011

Я использую HtmlCleaner для очистки ISO-8859-1 закодированного веб-сайта в Android.

Я реализовал это во внешнем jar файле, который я импортировал в свое приложение для Android.

Когда я запускаю модульные тесты в Eclipse, он правильно обрабатывает норвежские буквы (æ,ø,å) (я могу убедиться в этом в отладчике), но в приложении Android эти символы выглядят как перевернутые знаки вопроса.

Если я присоединяю отладчик к своему приложению для Android, я вижу, что эти буквы неверны в тех же местах, в которых они были хороши при запуске модульного теста из Eclipse, поэтому это не проблема отображения / рендеринга / просмотра в приложении Android .

Когда я копирую текст из отладчиков, я получаю следующие результаты:

Процесс Java (модульный тест) : "Blårek", "Benny"

Процесс Android (в эмуляторе) : "Bl rek", "Benny"

Я бы ожидал, что эти строки будут равны, но обратите внимание, как «å» заменяется на перевернутые знаки вопроса в Android.

Я попытался запустить htmlCleaner.getProperties().setRecognizeUnicodeChars(true) без удачи. Кроме того, я не нашел способа принудительного кодирования UTF-8 или ISO-8859-1 в html cleaner, но я не уверен, что это могло бы изменить ситуацию.

Вот код, который я запускаю:

HtmlCleaner htmlCleaner = new HtmlCleaner();

// connect to url and get root TagNode from HtmlCleaner
InputSteram is = new URL( url ).openConnection().getInputStream();
TagNode rootNode = htmlCleaner.clean( is );

// navigate through some TagNodes, getting the ContentNode 
ContentNode cn = rootNode... 

// This String contains the incorrectly decoded characters on Android. 
// Good in Oracle JVM though..
String value = cn.toString().trim();

Кто-нибудь знает, что может вызвать изменения поведения декодирования на Android? Я предполагаю, что основное различие между этими двумя средами состоит в том, что приложение Android использует стек java.io для Android, а мои модульные тесты используют стек Sun / Oracle.

Спасибо
Гейр

1 Ответ

0 голосов
/ 18 августа 2013

HtmlCleaner не могу сказать, какую кодировку использовать; вы передаете только тело ответа в InputStream, но кодировка указана в заголовке «content-type».

Вы можете установить кодировку символов в свойствах HtmlCleaner на правильную кодировку из HTTP-соединения. Но для этого потребуется проанализировать правильный параметр из заголовка типа контента. Кроме того, вы можете передать экземпляр URL в HtmlCleaner и позволить ему управлять соединением. Затем он получит доступ ко всей информации, необходимой для правильного декодирования.

...