web-dev-qa-db-ja.com

Android UTF-8文字が文字化けしたWebView。

Androidアプリでいくつかのウェブビューを使用していますが、utf-8エンコードで表示することはできません。

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

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

これを試しても、何も表示されません

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

よろしく

72
elwis

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

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");
151
Eric Nordvik

これは、何らかの形またはファッションで永遠に壊れていたようです。 問題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");

この定式化は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がまだこの基本的な問題を解決していないことは驚くべきことです。

125

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

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

Adroid 2.xでutf-8を使用し、4.xでANSIを文字化けしました。

 charset=utf-8

wv.loadUrlWhatever()呼び出しで。細部へのこだわり、デルズ

27
R Earle Harris

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
_

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

12
Aaron D
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タイプでcharsetが好きです:/奇妙です。これは私にとって数ヶ月間の悪化を解決しました。

9
user2860495

最初の2つの引数を交換する必要があります。このスレッドを参照してください: Android WebView UTF-8 not show

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

mWebView.loadDataWithBaseURL(null, "file:///Android_asset/om.html", "text/html", "utf-8",null);
2
Sparky
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
0
PPD

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

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

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

0
Ali Hashemi

そのページを読み込む前にあなたが何をしているのか分かりません。このセキュリティの変更は何か関係がありますか?以前にウェブからページを読み込んでいますか?

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

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

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

0
Shakakai