web-dev-qa-db-ja.com

Android WebView UTF-8が表示されない

私はウェブビューを持っていて、それにシンプルなUTF-8テキストをロードしようとしています。

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

しかし、WebViewはANSI/ASCIIガベージを表示します。

明らかにエンコーディングの問題ですが、webviewにUnicodeテキストを表示するように指示する際に何が欠けていますか?

これはHelloWorldアプリです。

44
Ian Vink

使用する:

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

または setDefaultTextEncoding でWebSettingsを使用:

WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");

Androidの最近のバージョンのAPI 16〜22では、テストされ、loadData()メソッドを使用して適切に動作します。mimeTypeに「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);

または

  mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8");
118
Jorgesys

この問題は少なくともジンジャーブレッドに戻ります

これは、何らかの形または方法で永遠に壊れたようです。 問題17

LoadDataの代わりにloadDataWithBaseURLを使用します

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

ここで本当に厄介なのは、Samsung Galaxy S II(4.0.3)でloadData()が正常に機能することですが、Galaxy Nexus(4.0.2)でテストすると、loadDataWithBaseURL( )。 WebViewドキュメント

Androidの最近のバージョン

一部は、mimeTypecharset=utf-8を含める必要があるloadData呼び出しの動作の変更を報告しています。

webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");

討論

私がサムスンギャラクシーIIで開発していたときに、上司が私に彼の電話、初期のネクサスを最初に持ってきたとき、それは非ASCII文字がたくさんある彼の電話の経済ニュースフィードに表示されました。したがって、これはAndroid内で長年の問題であるだけでなく、デバイスメーカー間でも一貫していません。これは、防御的にプログラミングしなければならない問題です。