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.

40
demandé sur BahaiResearch.com 2010-07-22 23:31:08

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");
114
répondu Jorgesys 2016-03-06 17:26:40

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.

6
répondu Cameron Lowell Palmer 2016-03-06 07:24:24