Android 4.0 の WebView.loadData で文字化け

Android 2.1 では問題なく動作していた WebView なのだけど、Android 4.0 の端末で試してみたら見事に文字化け!
エミュレータでも実機でも起きる現象。

なぜかネット上では殆ど話題になっていないので、かなりレアケースというか自分だけなのかもしれないけどメモ。

WebView に html のデータを loadData で読み込む

オリジナルのコードは WebView に html のデータを loadData で読み込んでいるこんなコード。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView = (WebView)findViewById(R.id.myWebView);
    String html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>"+"<body>android4.0<br />漢字を書いてるよ!</body></html>";
    webView.loadData(html, "text/html", "utf-8");
}

Android 2.x では特に問題なく表示される。


これを Android 4.0 のエミュレータや実機で行うとこうなる…

見事に日本語部分が文字化け!

同様の問題を検索してみると…

日本語では 日本Androidの会 のグーグルグループで1つ見つけた。

Android 4.0 ではないけど、症状は同じだと思う。


で、次にいつもお世話になっている Stack Overflow では…

というわけで、おんなじことに打ち当たってる人がいた〜。
やっぱり頼りになるな〜。

Android 4.0 で WebView.loadData を使って文字化けなく表示する

検索して見つけたページの方法をあれこれ試してみて、上記コードの html を読み込む部分で、以下の2つのどちらかを使うと文字化けせずに読み込めることがわかった。

  • loadDataWithBaseURL(null, html, "text/html", "utf-8", null)
  • loadData(html, "text/html; charset=utf-8", "utf-8")

今回の自分のケースでは、BaseURL云々は関係ないので 2番目の方法を使うことにしてめでたしめでたし!