Android WebView UTF-8 не отображается - PullRequest
43 голосов
/ 22 июля 2010

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

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

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

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

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

Ответы [ 2 ]

118 голосов
/ 23 июля 2010

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

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

или использование веб-настроек с 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");
8 голосов
/ 06 марта 2016

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

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

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

// 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, и он появился в нашей новостной ленте экономических новостей на его телефоне, в которой было много -АССИИ персонажей. Таким образом, не только это является давней проблемой в Android, но и несовместимо между производителями устройств. Это вопрос, где вы должны программировать в обороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...