web-dev-qa-db-fra.com

Android WebView UTF-8 ne s'affiche pas

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.

44
Ian Vink

Utilisation:

mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);

ou en utilisant 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 mimeType pour 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");
118
Jorgesys

Ce problème remonte au moins à Gingerbread

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, 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

Versions récentes d'Android

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");

Discussion

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.

9