Il est possible d'utiliser la méthode suivante pour le paramétrage du contenu d'une vue Web loadData (String data, String mimeType, String encoding)
Comment gérer le problème avec l'encodage inconnu des données html?!
Existe-t-il une liste d'encodages?!
Je sais de mon université que dans mon cas, le HTML vient de DB et est encodé avec latin-1. J'essaie de définir le paramètre d'encodage sur latin-1, sur ISO-8859-1 / iso-8859-1, mais j'ai toujours des problèmes avec l'affichage de signes spéciaux comme ä, ö, ü.
Je serai très reconnaissant pour tout conseil.
WebView.loadDataWithBaseURL()
WebView.loadData () ne fonctionne pas du tout correctement. Ce que j'avais à faire était:
Je pense que dans votre cas, vous devriez remplacer UTF-8 par latin1 ou ISO-8859-1 à la fois dans l'en-tête et dans WebView.loadData ().
Et, pour donner une réponse complète, voici la liste officielle des encodages: http://www.iana.org/assignments/character-sets
Je mets à jour ma réponse pour être plus inclusive:
Pour utiliser WebView.loadData () avec des encodages non latin1, vous devez encoder le contenu html. L'exemple précédent ne fonctionnait pas correctement sous Android 4+, je l'ai donc modifié pour ressembler à ceci:
Mais plus tard, je suis passé à WebView.loadDataWithBaseURL () et le code est devenu très propre et ne dépend pas de la version d'Android:
Pour une raison quelconque, ces fonctions ont une implémentation complètement différente.
la source
Si je comprends bien,
loadData()
génère simplement undata:
URL avec les données fournies.Lisez les javadocs pour
loadData()
:Par conséquent, vous devez soit utiliser US-ASCII et échapper vous-même tous les caractères spéciaux, soit simplement encoder tout en utilisant Base64. Ce qui suit devrait fonctionner, en supposant que vous utilisez UTF-8 (je ne l'ai pas testé avec latin1):
la source
J'ai ce problème, mais:
ne fonctionne pas dans tous les appareils. Et je fusionne quelques méthodes:
Ça marche.
la source
utilisez ceci: String customHtml = text;
la source
la source
Le moyen le plus sûr de charger htmlContent dans une vue Web consiste à:
"Encodage Base64" est une recommandation officielle qui a été réécrite (déjà présente dans Javadoc) dans le dernier bogue 01/2019 de Chrominium (présent dans WebView M72 (72.0.3626.76)):
https://bugs.chromium.org/p/chromium/issues/detail?id=929083
Déclaration officielle de l'équipe Chromium:
"Solution recommandée:
notre équipe vous recommande d'encoder les données avec Base64. Nous avons fourni des exemples pour savoir comment procéder:
Ce correctif est rétrocompatible (il fonctionne sur les versions antérieures de WebView), et devrait également être à l'épreuve du temps (vous ne rencontrerez pas de futurs problèmes de compatibilité en ce qui concerne l'encodage du contenu). "
Exemple de code:
la source
les réponses ci-dessus ne fonctionnent pas dans mon cas. Vous devez spécifier utf-8 dans la balise meta
la source
webview.loadDataWithBaseURL (null, texte, "texte / html", "UTF-8", null);
la source