Android WebView не может отображать символы авторских прав или товарных знаков? - PullRequest
0 голосов
/ 08 марта 2012

Когда я отображаю маркеры, символы авторского права, знаки товарных знаков в веб-браузере, они выглядят нормально.

// bullets: http://losangeles.craigslist.org/wst/acc/2900906683.html
// bullets: http://losangeles.craigslist.org/lac/acc/2902059059.html
// bullets: http://indianapolis.craigslist.org/acc/2867115357.html
// bullets: http://indianapolis.craigslist.org/ofc/2885697780.html
// bullets: http://indianapolis.craigslist.org/ofc/2887554512.html
// copyright: http://chicago.craigslist.org/nwc/acc/2854640931.html

Но я получаю "вопросительные знаки внутри треугольников", когда использую Android WebView с:

web.loadDataWithBaseURL(null, myHtml, null, "UTF-8", null);

Должен ли я использовать другую кодировку?

Должен ли я сам искать / заменять определенные символы ... 1 на 1?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Попробуйте использовать настройки WebView

myWebView = (WebView)findViewById(R.id.mywebView);
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("UTF-8");
1 голос
/ 10 марта 2012

Я сталкивался с этой проблемой раньше. Я хотел бы убедиться, что ваша строка myHtml уже имеет хорошую кодировку, прежде чем загружать ее в свой WebView. Вы можете проверить это, войдя в систему с помощью Log.d (). Если в этой строке неправильная кодировка, она также не будет отображаться правильно в WebView. Вы увидите этих странных персонажей в LogCat.

Если это так, вам нужно убедиться, что при чтении данных в строку myHtml вы используете что-то вроде InputStreamReader и передаете его в кодировке символов «UTF-8».

Я бы изменил строку кода, которую вы используете:

BufferedReader buffer = new BufferedReader(new InputStreamReader(content), 1000);

до:

BufferedReader buffer = new BufferedReader(new InputStreamReader(content, "UTF-8"), 1000);

Эта версия конструктора документирована для:

Создает новый InputStreamReader для InputStream в. Преобразователь символов, который используется для декодирования байтов в символы, идентифицируется по имени по enc. Если кодировка не может быть найдена, выдается ошибка UnsupportedEncodingException.

на http://developer.android.com/reference/java/io/InputStreamReader.html и посмотрите на второй.

РЕДАКТИРОВАТЬ: Если это не сработает, вы можете попробовать:

String s = EntityUtils.toString(entity, HTTP.UTF_8);

от Проблема с Android Java UTF-8 HttpClient

...