WebView.loadData () não está funcionando corretamente. O que eu tive que fazer foi:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Acho que no seu caso você deve substituir UTF-8 por latin1 ou ISO-8859-1 tanto no cabeçalho quanto no WebView.loadData ().
E, para dar uma resposta completa, aqui está a lista oficial de codificações: http://www.iana.org/assignments/character-sets
Eu atualizo minha resposta para ser mais inclusiva:
Para usar WebView.loadData () com codificações não latin1, você deve codificar o conteúdo html. O exemplo anterior não estava funcionando corretamente no Android 4+, então eu o modifiquei para ter a seguinte aparência:
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);
}
Mais tarde, porém, mudei para WebView.loadDataWithBaseURL () e o código tornou-se muito limpo e não depende da versão do Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Por alguma razão, essas funções têm implementações completamente diferentes.