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
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");
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.
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
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.
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.
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);
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é.
vous devez garder 3 choses à l'esprit pour montrer le bon contenu toujours:
- utilisant loadDataWithBaseUrl au lieu de loadData funciton.
- définir le codage correct dans le fichier html comme une balise meta
- paramétrage defaultTextEncodingName in WebSettings
les exemples ont été fournis par d'autres réponses donc je ne répète pas!
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\+"," "), "text/html", "utf-8");