Android WebView UTF-8 non affiché
j'ai un webview et j'essaie de charger du texte UTF-8 simple dedans.
mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");
mais le WebView affiche ANSI/ASCII garbage.
évidemment un problème d'encodage, mais qu'est-ce que je manque pour dire au webview d'afficher le texte Unicode?
C'est une application HelloWorld.
2 réponses
Utiliser:
mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);
ou en utilisant des WebSettings avec setDefaultTextEncoding :
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
pour les versions récentes D'Android, API 16 à 22 Il a été testé et fonctionne correctement en utilisant la méthode loadData (), nécessite le type Mimet inclure: "charset=utf-8".
WebView mWebView = (WebView) findViewById(R.id.myWebView);
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
mWebView.loadData(myCharacters, "text/html; charset=utf-8",null);
ou
mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8");
ce problème remonte au moins à Gingerbread
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 ennuyeux est que sur le Samsung Galaxy S II (4.0.3) loadData () fonctionne très bien, mais les essais sur le Nexus Galaxy (4.0.2) les caractères multi-octets sont brouillés à moins que vous utiliser loadDataWithBaseURL (). 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");
Discussion
la première fois que j'ai vu cela, mon patron m'a apporté son téléphone, un Nexus précoce, alors que je développais à L'époque sur un Samsung Galaxy II et il il est apparu dans notre flux de nouvelles économiques sur son téléphone qui avait beaucoup de caractères non-ASCII. Donc, non seulement il s'agit d'un problème de longue date au sein D'Android, mais il est également pas cohérente entre les fabricants de périphériques. C'est une question où vous devez programmer défensivement.