WebView.loadData () вообще не работает должным образом. Что мне нужно было сделать:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Я думаю, что в вашем случае вам следует заменить UTF-8 на latin1 или ISO-8859-1 как в заголовке, так и в WebView.loadData ().
И, чтобы дать полный ответ, вот официальный список кодировок: http://www.iana.org/assignments/character-sets
Я обновляю свой ответ, чтобы он был более содержательным:
Чтобы использовать WebView.loadData () с кодировками, отличными от latin1, вам необходимо закодировать html-контент. Предыдущий пример некорректно работал в Android 4+, поэтому я изменил его, чтобы он выглядел следующим образом:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
String base64 = Base64.encodeToString(htmlString.getBytes(), Base64.DEFAULT);
myWebView.loadData(base64, "text/html; charset=utf-8", "base64");
} else {
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header + htmlString, "text/html; charset=UTF-8", null);
}
Но позже я переключился на WebView.loadDataWithBaseURL (), и код стал очень чистым и не зависел от версии Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Почему-то у этих функций совершенно разная реализация.