WebView.loadData () no funciona correctamente en absoluto. Lo que tenía que hacer era:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Creo que en su caso debería reemplazar UTF-8 con latin1 o ISO-8859-1 tanto en el encabezado como en WebView.loadData ().
Y, para dar una respuesta completa, aquí está la lista oficial de codificaciones: http://www.iana.org/assignments/character-sets
Actualizo mi respuesta para que sea más inclusiva:
Para usar WebView.loadData () con codificaciones que no sean latin1, debe codificar el contenido html. El ejemplo anterior no funcionaba correctamente en Android 4+, así que lo modifiqué para que se vea de la siguiente manera:
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);
}
Pero luego cambié a WebView.loadDataWithBaseURL () y el código se volvió muy limpio y no depende de la versión de Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Por alguna razón, estas funciones tienen una implementación completamente diferente.