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 se debe reemplazar UTF-8 con latin1 o ISO-8859-1, tanto en la cabecera y en WebView.loadData().
Y, para dar una respuesta completa, aquí está la lista oficial de codificaciones: http://www.iana.org/assignments/character-sets
puedo actualizar mi respuesta sea más inclusiva:
Para utilizar WebView.loadData() con codificaciones no latin1 que tienen que codificar contenido html ejemplo anterior no funcionaba correctamente en Android 4+, así que he modificado 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 después me he cambiado a WebView.loadDataWithBaseURL() y el código se hizo muy limpio y no en función 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.
Privet, Andrey. He intentado tu solución. Desafortunadamente no funcionó para mí :( – Tima
¿Has probado UTF-8 como lo describí? Ahora cuando pienso en tu pregunta, se me ocurre que en Java todas las cadenas están en UTF-8, así que mi ejemplo debería funcionar intacto. –
Todas las cadenas son UTF-8, pero el texto procedente del servidor está en latin-1. Creo que lo intenté con UTF-8 y con latin-1 y con ISO-8859-1, pero vi señales extrañas en lugar de ü , ö, ä. Pero tengo otra idea, intentaré convertir el flujo de bytes del servidor a cadena usando la codificación correcta. Tal vez, eso me ayudará – Tima