Android WebView avec des caractères UTF-8 confus.

j'utilise quelques webviews dans mon application android, mais je ne peux pas les faire s'afficher dans l'encodage utf-8.

si vous utilisez celui - ci, je ne verrai pas mes Chartres scandinaves:

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

Et si essayer celui-là, je ne vais pas obtenir quoi que ce soit affiché à tous les

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

concerne

71
demandé sur Cameron Lowell Palmer 2011-02-08 15:36:21

9 réponses

Vous pouvez essayer de modifier les paramètres de votre webview avant de charger les données:

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

aussi, comme fourni dans le commentaire ci-dessous, être sûr d'ajouter "charset=utf-8" à l'appel de loadData:

mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
140
répondu Eric Nordvik 2016-02-22 17:37:45

cela semble avoir été brisé sous une forme ou une autre pour toujours. Issue 1733 151990920"

utiliser loadDataWithBaseURL au lieu de loadData.

// Pretend this is an html document with those three characters
String 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 les tests sur le Galaxy Nexus (4.0.2) les caractères multi-octets sont brouillés sauf si vous utilisez loadatawithbaseurl (). Documentation WebView

versions récentes D'Android

certains signalent un changement dans le comportement des appels loadData exigeant 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'a toujours pas résolu ce problème de base.

123
répondu Cameron Lowell Palmer 2016-04-13 08:33:12

le morceau de Derzu est très utile ci-dessus:

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

j'avais utf-8 sur Adroid 2.x et ANSI sur 4.x jusqu'à ce que je mette dans le

 charset=utf-8

dans le wv.loadUrlWhatever () call. Excellente attention aux détails, Derzu

27
répondu R Earle Harris 2013-04-16 19:04:15

il y a deux façons pour une page HTML livrée par un serveur HTTP de spécifier l'encodage du contenu. Habituellement, le serveur spécifie le codage du contenu dans les en-têtes HTTP, mais puisque cette page est chargée à partir d'un fichier, il n'y a pas de transaction HTTP et donc pas d'en-têtes. En conséquence, WebView suppose un encodage par défaut de Latin-1.

cependant, vous pouvez spécifier un encodage de contenu en utilisant la balise <meta> . Construisez votre fichier html ainsi:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Title</title>
</head>
Your content following

et ensuite le charger dans WebView en utilisant mWebView.loadUrl("file:///android_asset/om.html"); . Il devrait afficher les caractères non latins comme vous l'attendez.

12
répondu Aaron D 2013-04-28 07:50:12
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 jeu de caractères le type mime :/ étrange. cela a résolu des mois d'aggravation pour moi.

9
répondu user2860495 2013-10-08 22:26:30

Vous devez échanger vos deux premiers arguments. Voir ce fil: Android WebView UTF-8 ne montrant pas

donc votre code devrait ressembler à ceci:

mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
2
répondu Sparky 2017-05-23 11:47:08

Je ne sais pas ce que vous faites avant de charger cette page. Ce changement de sécurité pourrait-il avoir quelque chose à voir avec ça? Vous chargez la page web avant?

Note pour le post 1.0. En raison du changement dans le WebKit, l'accès aux fichiers d'actifs via "file:///android_asset/" pour les sous-Ressources est plus restreint. Si vous fournissez une chaîne nulle ou vide comme baseUrl, vous ne pourrez pas accéder aux fichiers d'actifs. Si le baseUrl est autre chose que http (s)/ftp(s)/about / javascript en tant que scheme, vous pouvez accéder à des fichiers asset pour des sous-Ressources.

extrait d'ici: http://developer.android.com/reference/android/webkit/WebView.html Dans la section sur la méthode "loadDataWithBaseURL".

pouvez-vous utiliser" loadData " à la place pour un test rapide? Spécifiez "utf-8" pour l'encodage et le collage d'un caractère Scandinave dans le parmètre de données. Test Simple pour supprimer le problème de sécurité.

0
répondu Shakakai 2011-02-08 13:13:17

vous devez garder 3 choses à l'esprit pour montrer le bon contenu toujours:

  1. utilisant loadDataWithBaseUrl au lieu de loadData funciton.
  2. définir le codage correct dans le fichier html comme une balise meta
  3. paramétrage defaultTextEncodingName in WebSettings

les exemples ont été fournis par d'autres réponses donc je ne répète pas!

0
répondu Ali Hashemi 2014-07-06 14:20:25
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\+"," "), "text/html", "utf-8");
0
répondu PPD 2015-04-24 09:19:00