Android WebView avec des caractères UTF-8 déformés.

J’utilise certaines vues Web dans mon application Android, mais je ne parviens pas à les afficher dans l’encodage utf-8.

Si vous utilisez celui-ci, je ne verrai pas mes personnages scandinaves:

mWebView.loadUrl("file:///android_asset/om.html") 

Et si essayez celui-ci, je ne ferai rien afficher du tout

 mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null); 

Cordialement

Vous pouvez essayer de modifier les parameters de votre vue Web avant de charger les données:

 WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); 

En outre, comme indiqué dans le commentaire ci-dessous, veillez à append "charset=utf-8" à l’appel loadData:

 mWebView.loadData(getSsortingng(R.ssortingng.info_texto), "text/html; charset=utf-8", "utf-8"); 

Cela semble avoir été brisé sous une forme ou une autre pour toujours. Numéro 1733

Utilisez loadDataWithBaseURL à la place de loadData.

 // Pretend this is an html document with those three characters Ssortingng scandinavianCharacters = "øæå"; // Won't render correctly webView.loadData(scandinavianCharacters, "text/html", "UTF-8"); // Will render correctly webView.loadDataWithBaseURL(null, scandinavianCharacters, "text/html", "UTF-8", null); 

Maintenant, la partie qui est vraiment ennuyeuse est que sur le Samsung Galaxy S II (4.0.3), loadData () fonctionne très bien, mais en testant le Galaxy Nexus (4.0.2), les caractères multi-octets sont brouillés à moins que vous utilisiez loadDataWithBaseURL ( ). Documentation WebView

Versions récentes d’Android

Certains signalent une modification du comportement des appels à loadData, nécessitant que mimeType inclue charset=utf-8 .

 webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8"); 

Vous pouvez également utiliser cette formulation avec WebSettings

 WebView webView = (WebView) findViewById(R.id.DemoWebView); WebSettings webSettings = webView.getSettings(); webSettings.setDefaultTextEncodingName("utf-8"); webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", null); 

Il est étonnant que Android n’ait toujours pas résolu ce problème fondamental.

Le bit de Derzu est très utile ci-dessus:

 webview.loadData(getSsortingng(R.ssortingng.info_texto), "text/html; charset=utf-8", "utf-8"); 

J’ai eu utf-8 sur Adroid 2.x et brouillé ansi sur 4.x jusqu’à ce que je mets dans le

  charset=utf-8 

dans l’appel wv.loadUrlWhatever (). Excellente attention aux détails, Derzu

Une page HTML fournie par un serveur HTTP peut spécifier le codage du contenu de deux manières. Généralement, le serveur spécifie le codage du contenu dans les en-têtes HTTP, mais comme cette page est en cours de chargement à partir d’un fichier, il n’y a pas de transaction HTTP et donc pas d’en-tête. Par conséquent, WebView suppose un codage par défaut de Latin-1.

Cependant, vous pouvez spécifier un codage de contenu à l’aide de la . Construisez votre fichier HTML ainsi:

 < !DOCTYPE HTML>    Title  Your content following 

Et puis le charger dans WebView en utilisant mWebView.loadUrl("file:///android_asset/om.html"); . Il devrait afficher les caractères non latins comme prévu.

 WebView wv = (WebView) findViewById(R.id.rowWebview); WebSettings settings = wv.getSettings(); settings.setDefaultTextEncodingName("utf-8"); wv.loadData(topHtml, "text/html; charset=utf-8",null); 

Une combinaison des deux semble fonctionner pour moi. Pour une raison quelconque, il aime null sur l’encodage et le charset dans le type mime: / weird. cela a résolu des mois d’aggravation pour moi.

Vous devez échanger vos deux premiers arguments. Voir ce sujet: Android WebView UTF-8 ne s’affiche pas

Donc, votre code devrait ressembler à ceci:

 mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null); 

Je ne suis pas sûr de ce que vous faites avant de charger cette page. Ce changement de sécurité pourrait-il avoir quelque chose à voir avec cela? Est-ce que vous chargez la page du web avant?

Note pour post 1.0. En raison de la modification de WebKit, l’access aux fichiers d’actifs via “file: /// android_asset /” pour les sous-ressources est plus restreint. Si vous fournissez une chaîne vide ou vide en tant que baseUrl, vous ne pourrez pas accéder aux fichiers d’actifs. Si baseUrl est un schéma autre que http (s) / ftp (s) / about / javascript, vous pouvez accéder aux fichiers de ressources pour les sous-ressources.

Tiré d’ici: http://developer.android.com/reference/android/webkit/WebView.html Dans la section sur la méthode “loadDataWithBaseURL”.

Pouvez-vous utiliser “loadData” pour un test rapide? Spécifiez “utf-8” pour l’encodage et le collage d’un caractère scandinave dans le paramètre data. Test simple pour supprimer le problème de sécurité.

Vous devez garder 3 choses à l’esprit pour afficher le bon contenu toujours:

  1. Utilisation de loadDataWithBaseUrl au lieu de la fonction loadData.
  2. Définition du codage correct dans un fichier HTML en tant que balise META
  3. Définition de defaultTextEncodingName dans WebSettings

Les exemples ont été fournis via d’autres réponses, donc je ne répète pas!

 mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");