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);
По някаква причина тези функции имат напълно различно изпълнение.
person
Andrey Novikov
schedule
22.11.2010