78

AndroidアプリでいくつかのWebビューを使用していますが、それらをutf-8エンコーディングで表示させることができません。

これを使用すると、スカンジナビアの文字が表示されません。

mWebView.loadUrl("file:///android_asset/om.html")

そして、これを試してみると、何も表示されません

mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);

よろしく

4

9 に答える 9

157

データをロードする前に、Webビューの設定を編集してみることができます。

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

また、以下のコメントで提供されているように、必ず"charset=utf-8"loadData呼び出しに追加してください。

mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
于 2011-02-08T13:03:40.347 に答える
135

これは、何らかの形または方法で永遠に壊れているようです。 1733年発行

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の最近のバージョン

mimeTypeを含める必要があるloadData呼び出しの動作の変更を報告している人もいますcharset=utf-8

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

この定式化を次のように使用することもできますWebSettings

WebView webView = (WebView) findViewById(R.id.DemoWebView);
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");  
webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", null);

Androidがまだこの基本的な問題を解決していないのは驚くべきことです。

于 2012-05-31T10:05:48.877 に答える
27

Derzuのビットは上記で非常に役立ちます:

webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");

私はAndroid2.xでUTF-8を使用し、4.xでANSIを文字化けさせました。

 charset=utf-8

wv.loadUrlWhatever()通話中。細部へのこだわり、デルズ

于 2013-04-16T19:04:15.950 に答える
12

HTTPサーバーによって配信されるHTMLページでコンテンツエンコーディングを指定する方法は2つあります。通常、サーバーはHTTPヘッダーでコンテンツのエンコードを指定しますが、このページはファイルから読み込まれるため、HTTPトランザクションがなく、ヘッダーもありません。その結果、WebViewはLatin-1のデフォルトのエンコーディングを想定しています。

ただし、<meta>タグを使用してコンテンツエンコーディングを指定できます。このようにhtmlファイルを作成します。

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Title</title>
</head>
Your content following

次に、を使用してWebViewにロードしmWebView.loadUrl("file:///android_asset/om.html");ます。期待どおりに非ラテン文字が表示されるはずです。

于 2013-04-28T07:50:12.097 に答える
9
WebView wv = (WebView) findViewById(R.id.rowWebview);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");                   
wv.loadData(topHtml, "text/html; charset=utf-8",null);

2つの組み合わせは私にとってはうまくいくようです。何らかの理由で、エンコーディングのnullとmimeタイプの文字セットが好きです:/奇妙です。これは私にとって何ヶ月もの悪化を解決しました。

于 2013-10-08T22:08:29.770 に答える
2

最初の2つの引数を入れ替える必要があります。このスレッドを参照してください:AndroidWebViewUTF-8が表示されない

したがって、コードは次のようになります。

mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
于 2012-02-24T00:42:36.047 に答える
1

適切なコンテンツを常に表示するには、次の3つの点に注意する必要があります。

  1. loadData関数の代わりにloadDataWithBaseUrlを使用します。
  2. メタタグとしてhtmlファイルに正しいエンコーディングを設定する
  3. WebSettingsでdefaultTextEncodingNameを設定する

例は他の回答を介して提供されているので、繰り返しません!

于 2014-07-06T14:20:25.857 に答える
0

そのページをロードする前に何をしているかわかりません。このセキュリティの変更はそれと関係がありますか?以前にWebからページを読み込んでいますか?

投稿1.0に関する注意。WebKitの変更により、サブリソースの「file:///android_asset/」を介したアセットファイルへのアクセスがより制限されます。baseUrlとしてnullまたは空の文字列を指定すると、アセットファイルにアクセスできなくなります。baseUrlがスキームとしてhttp(s)/ ftp(s)/ about / javascript以外の場合、サブリソースのアセットファイルにアクセスできます。

ここから取得:http : //developer.android.com/reference/android/webkit/WebView.htmlメソッド「loadDataWithBaseURL」のセクション。

代わりに「loadData」を使用して簡単なテストを行うことはできますか?スカンジナビア文字をデータパラメータにエンコードして貼り付けるには、「utf-8」を指定します。セキュリティの問題を取り除くための簡単なテスト。

于 2011-02-08T13:13:17.087 に答える
0
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
于 2015-04-24T09:19:00.587 に答える