WebView.loadData () w ogóle nie działa poprawnie. Musiałem zrobić:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Myślę, że w twoim przypadku powinieneś zamienić UTF-8 na latin1 lub ISO-8859-1 zarówno w nagłówku, jak iw WebView.loadData ().
Aby udzielić pełnej odpowiedzi, oto oficjalna lista kodowań: http://www.iana.org/ assignments/character- sets
Aktualizuję odpowiedź, aby była bardziej inkluzywna:
Aby użyć WebView.loadData () z kodowaniem innym niż latin1, musisz zakodować zawartość html. Poprzedni przykład nie działał poprawnie w systemie Android 4+, więc zmodyfikowałem go tak, aby wyglądał następująco:
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);
}
Ale później przeszedłem na WebView.loadDataWithBaseURL () i kod stał się bardzo czysty i nie zależał od wersji Androida:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Z jakiegoś powodu te funkcje mają zupełnie inną implementację.