J'utilise des vues Web dans mon Android, mais je ne peux pas les faire s'afficher en encodage utf-8.
Si vous utilisez celui-ci, je ne verrai pas mes caractères scandinaves:
mWebView.loadUrl("file:///Android_asset/om.html")
Et si vous essayez celui-ci, je ne verrai rien du tout
mWebView.loadDataWithBaseURL("file:///Android_asset/om.html", null, "text/html", "utf-8",null);
Cordialement
Vous pouvez essayer de modifier les paramètres 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, assurez-vous d'ajouter "charset=utf-8"
à l'appel loadData:
mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
Cela semble avoir été rompu pour toujours sous une forme ou une mode. Numéro 17
Utilisez 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, ce qui est vraiment ennuyeux, c'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 multi-octets sont tronqués à moins que vous n'utilisiez loadDataWithBaseURL ( ). Documentation WebView
Certains signalent un changement dans le 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'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 déformé sur 4.x jusqu'à ce que je mette
charset=utf-8
dans l'appel wv.loadUrlWwhat (). Excellente attention aux détails, Derzu
Il existe deux façons dont une page HTML fournie par un serveur HTTP peut spécifier l'encodage de contenu. Habituellement, le serveur spécifiera le codage de contenu dans les en-têtes HTTP, mais puisque 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êtes. Par conséquent, WebView suppose un encodage par défaut de Latin-1.
Cependant, vous pouvez spécifier un encodage de contenu à l'aide de la balise <meta>
. Construisez ainsi votre fichier html:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Title</title>
</head>
Your content following
Ensuite, chargez-le dans WebView à l'aide de 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 jeu de caractères dans le type mime:/weird. 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 s'affiche pas
Votre code devrait donc ressembler à ceci:
mWebView.loadDataWithBaseURL(null, "file:///Android_asset/om.html", "text/html", "utf-8",null);
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
Vous devez garder 3 choses à l'esprit pour toujours afficher le bon contenu:
Les exemples ont été fournis via d'autres réponses, donc je ne répète pas!
Je ne sais pas ce que vous faites avant de charger cette page. Ce changement de sécurité pourrait-il y être lié? Chargez-vous la page du Web auparavant?
Remarque pour la version 1.0. En raison de la modification du WebKit, l'accès aux fichiers de ressources 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 de ressources. Si la baseUrl est autre chose que http (s)/ftp (s)/about/javascript comme schéma, 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" à la place pour un test rapide? Spécifiez "utf-8" pour l'encodage et le collage d'un caractère scandinave dans le paramètre de données. Test simple pour supprimer le problème de sécurité.