Набор символов в WebView (Android)

1

Я пытаюсь отобразить некоторые данные из Java String в WebView, используя метод loadData():

wv.loadData(myString, "text/html, "utf-8");

Проблема, с которой я сталкиваюсь, заключается в том, что WebView управляет выводами символов non- ASCII (я предполагаю?). Если я использую TextView вместо WebView, эта проблема не возникает, и текст отображается правильно (хотя есть некоторая разметка HTML, поэтому TextView в конечном итоге не требуется).

Если это помогает, когда я запускаю следующий код:

for(int i = 0; i < myString.length() && i < 400; i++)
      Log.i("Text", myString.charAt(i) + ": " + (int) myString.charAt(i));

символ нарушения отображается как таковой в журнале:

05- 27 13: 15: 45.110: INFO/Текст (606): â: 8217

Это проблема с набором символов, я думаю, но я не совсем уверен, как ее решить.

Вот фрагмент HTML (я не уверен, что мой работодатель разрешит полную публикацию содержимого):

Премьер-министр Туниса

Это характер, вызывающий проблему. NB: то, что я показываю, не является созданной HTML-страницей fully-.. просто текст с разметкой HTML, если это имеет значение.

  • 0
    Привет Адам, я могу получить твой код? Наряду с HTML-данными, которые вы хотите отобразить
  • 0
    Здравствуйте, Адам, вы нашли какое-либо решение, пожалуйста, поделитесь, я сталкиваюсь с тем же - спасибо.
Теги:
character-encoding
android-webview

2 ответа

6

У меня была аналогичная проблема, когда строка, которую я передавал в метод loadData(), не была должным образом представлена ​​в WebView (у нее были нечетные символы вместо правильных DBCS). В моем случае строка была правильно закодирована в UTF- 8, и проблема заключалась в том, как loadData() использовала строку.

Я обнаружил, что важно указать набор символов в аргументе типа mime, а не аргумент кодирования. В частности, вызов должен был быть

wv.loadData(myString, "text/html; charset=utf-8", encoding);

В моем случае я передал null как переменную кодирования и работал (Android 4.2.1). Чтение документации API по loadData(); он, похоже, указывает, что он примет "base64", и все остальные значения приведут к тому, что аргумент данных будет рассматриваться как URL- закодированный ASCII.

Поэтому вы НЕ МОЖЕТЕ установить кодировку строки с параметром кодирования, вы должны указать кодировку в типе mime.

  • 1
    Этот совет работает.
1

Try:

wv.loadData(URLEncoder.encode(myString).replace("+", "%20"), "text/html, "utf-8");

Или, если это не работает:

wv.loadData(myString, "text/html, "ISO-8859-1");

Или комбинация из двух. Один из них вообще работает для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню