J'ai une vue Web et j'essaye d'y charger un simple texte UTF-8.
mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");
Mais WebView affiche les déchets ANSI/ASCII.
Évidemment, un problème d'encodage, mais qu'est-ce qui me manque en disant à la vue Web d'afficher le texte Unicode?
Ceci est une application HelloWorld.
Utilisation:
mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);
ou en utilisant WebSettings avec setDefaultTextEncoding :
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("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");
Cela semble avoir été rompu pour toujours sous une forme ou une mode. Numéro 17
// 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 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");
La première fois que j'ai vu cela, mon patron m'a apporté son téléphone, un premier Nexus, alors que je développais à l'époque sur un Samsung Galaxy II et cela est apparu dans notre fil d'actualité économique sur son téléphone qui avait beaucoup de caractères non ASCII . Donc, non seulement c'est un problème de longue date dans Android, mais il n'est pas non plus cohérent entre les fabricants d'appareils. C'est une question où vous devez programmer de manière défensive.