酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WebBrowser.NavigateToStringメソッドで実体参照変換しなくても日本語が表示できるかも?

WebBrowserコントロールでローカルのコンテンツを表示する」を書いたところ、WebBrowser.NavigateToStringメソッドで実体参照変換しなくても日本語が表示できるかも?と教えて頂きました。

いくつかのパターンは試してみているのですが、やはり文字化けしちゃっているようです。実体参照変換せずに日本語が表示されるコードを教えてください……

<?xml version="1.0" encoding="UTF-8"?>
<html>
  <head></head>
  <body>
  テストページです。
  </body>
</html>

だめ。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
  </head>
  <body>
  テストページです。
  </body>
</html>

だめ。

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
  </head>
  <body>
  テストページです。
  </body>
</html>

だめ。

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
    テストページです。
  </body>
</html>

だめ。

(追記)動的にHTMLを書き換えるテクニック

@mikiofukuに教えてもらいました。

あらかじめ、WebBrowser.NavigateToStringメソッドを使って以下のようなHTMLを表示させた後に、InvokeScriptメソッドで表示させたいHTML文字列を流し込むと良いらしい。

<html>
    <head>
        <script type="text/javascript">
            function replace(html) {
              document.open();
              document.write(html);
              document.open();
            }
        </script>
    </head>
    <body>
    </body>
</html>

うーん……これはWebBrowser.NavigateToStringメソッドで表示したとは言えないのではw