WebView.loadData() non funziona correttamente. Quello che dovevo fare era:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
Credo che nel tuo caso è necessario sostituire UTF-8 con latin1 o ISO-8859-1 sia nell'intestazione e nel WebView.loadData().
E, per dare una risposta completa, ecco la lista ufficiale delle codifiche: http://www.iana.org/assignments/character-sets
posso aggiornare la mia risposta per essere più inclusiva:
Per utilizzare WebView.loadData() con codifiche non latin1 si deve codifica il contenuto html. Nell'esempio precedente non funzionava correttamente in Android 4+, così ho modificato farlo sembrare 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 ho passato a WebView.loadDataWithBaseURL() e il codice è diventato molto pulito e non in base alla versione di Android:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
Per qualche motivo queste funzioni hanno un'implementazione completamente diversa.
fonte
2010-11-22 19:45:03
Privet, Andrey. Ho provato la tua soluzione. Purtroppo non ha funzionato per me :( – Tima
Hai provato UTF-8 come ho descritto? Ora quando penso alla tua domanda mi viene in mente che in Java tutte le stringhe sono in UTF-8, quindi il mio esempio dovrebbe funzionare intatto. –
Tutte le stringhe sono UTF-8, ma il testo proveniente dal server è in latino 1. Penso, ho provato con UTF-8 e con latin-1 e con ISO-8859-1, ma ho visto ancora strani segni invece di ü , ma, ma ho un'altra idea, proverò a convertire il flusso di byte dal server in una stringa usando la codifica giusta, forse, questo mi aiuterà – Tima