Android WebView UTF-8 не отображается
У меня есть веб-просмотр и я пытаюсь загрузить в него простой текст UTF-8.
mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");
Но WebView отображает мусор ANSI/ASCII.
Очевидно, проблема с кодировкой, но что мне не хватает в том, что вы указываете веб-просмотр для отображения текста в Unicode?
Это приложение HelloWorld.
Ответы
Ответ 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 вместо loadDatah2 >
// 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, но и не совместимо между производителями устройств. Это вопрос, когда вам нужно запрограммировать защиту.