Подтвердить что ты не робот

Android WebView UTF-8 не отображается

У меня есть веб-просмотр и я пытаюсь загрузить в него простой текст UTF-8.

mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");

Но WebView отображает мусор ANSI/ASCII.

Очевидно, проблема с кодировкой, но что мне не хватает в том, что вы указываете веб-просмотр для отображения текста в Unicode?

Это приложение HelloWorld.

4b9b3361

Ответ 1

Использование:

mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);

или используя WebSettings с setDefaultTextEncoding:

WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");

Для последних версий Android, API с 16 по 22, он был протестирован и корректно работает с использованием метода loadData(), поэтому mimeType должен включать: "charset = utf-8".

WebView mWebView = (WebView) findViewById(R.id.myWebView);
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");                   
mWebView.loadData(myCharacters, "text/html; charset=utf-8",null);

или

  mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8");

Ответ 2

Эта проблема восходит по крайней мере к Gingerbread

Это, кажется, было нарушено в какой-то форме или моде навсегда. Проблема 1733

Использовать loadDataWithBaseURL вместо loadData​​h2 >

// Pretend this is an html document with those three characters
String scandinavianCharacters = "øæå";

// Won't render correctly
webView.loadData(scandinavianCharacters, "text/html", "UTF-8");

// Will render correctly
webView.loadDataWithBaseURL(null, scandinavianCharacters, "text/html", "UTF-8", null);

Теперь часть, которая по-настоящему раздражает, заключается в том, что на Samsung Galaxy S II (4.0.3) loadData() работает просто отлично, но тестирование на Galaxy Nexus (4.0.2) искажает многобайтовые символы, если вы не используйте loadDataWithBaseURL(). Документация WebView

Последние версии Android

Некоторые сообщают об изменении поведения вызовов loadData, требующих mimeType включить charset=utf-8.

webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");

Обсуждение

В первый раз, когда я увидел это, мой босс принес мне свой телефон, ранний Nexus, в то время как я развивался в то время на Samsung Galaxy II, и он появился в нашей электронной новостной ленте на его телефоне, у которого было много не- -ASCII. Таким образом, это не только долгое время в Android, но и не совместимо между производителями устройств. Это вопрос, когда вам нужно запрограммировать защиту.