Ce problème remonte au moins à Gingerbread
Cela semble être brisé sous une forme ou une autre depuis toujours. Problème 1733
Utilisez loadDataWithBaseURL au lieu de loadData
// Faites semblant qu'il s'agit d'un document html avec ces trois caractères
String caractères_scandinaves = "øæå";
// Ne va pas se rendre correctement
webView.loadData(caractères_scandinaves, "text/html", "UTF-8");
// Va se rendre correctement
webView.loadDataWithBaseURL(null, caractères_scandinaves, "text/html", "UTF-8", null);
Maintenant, la partie vraiment ennuyeuse est que sur le Samsung Galaxy S II (4.0.3), loadData() fonctionne très bien, mais en testant sur le Galaxy Nexus (4.0.2), les caractères multioctets sont brouillés à moins d'utiliser loadDataWithBaseURL(). Documentation de WebView
Les versions récentes d'Android
Certains rapportent un changement dans le comportement des appels à loadData nécessitant que le mimeType
inclue charset=utf-8
.
webView.loadData(caractères_scandinaves, "text/html; charset=utf-8", "UTF-8");
Discussion
La première fois que j'ai vu cela, mon patron m'a apporté son téléphone, un ancien Nexus, alors que je développais à l'époque sur un Samsung Galaxy II et il est apparu dans notre flux d'actualités économiques sur son téléphone qui contenait beaucoup de caractères non-ASCII. Donc, non seulement c'est un problème de longue date au sein d'Android, mais cela n'est pas non plus cohérent entre les fabricants de dispositifs. C'est un domaine où il faut programmer de manière défensive.
1 votes
Solution : Utilisez la autre méthode sur WebView -> mWebView.loadDataWithBaseURL(null, "", "text/html", "UTF-8", "about:blank");