WebView.loadData () non funziona affatto correttamente. Quello che dovevo fare era:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Penso che nel tuo caso dovresti sostituire UTF-8 con latin1 o ISO-8859-1 sia nell'header che in WebView.loadData ().
E, per dare una risposta completa, ecco l'elenco ufficiale delle codifiche: http://www.iana.org/assignments/character-sets
Aggiorno la mia risposta per essere più inclusiva:
Per usare WebView.loadData () con codifiche non latin1 devi codificare il contenuto html. L'esempio precedente non funzionava correttamente in Android 4+, quindi l'ho modificato per apparire come segue:
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);
}
Ma in seguito sono passato a WebView.loadDataWithBaseURL () e il codice è diventato molto pulito e non dipende dalla versione di Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Per qualche ragione queste funzioni hanno un'implementazione completamente diversa.