WebBrowserコントロールのDocumentTextプロパティの罠

WebBrowserコントロールで表示しているHTMLをXHTMLに清書しようと

webBrowser1.DocumentText

を入力としてTidy.NETtidy.dllHTML2XHTMLを使うと不思議と文字化けします。エンコーディングUTF-8を指定してもダメ。

で、原因がわかりました。HTMLがShift-JISで書かれている場合にDocumentTextプロパティの値が文字化けするようです。ヘッダでエンコーディングが指定されてないのが原因かも。

webBrowser1.Document.Body.OuterHtml

などは正常なので、気づきにくい罠です。

こうやって文字化けを直してあげると、Tidy.NETで正常にXHTMLへ変換できました。

MemoryStream reader = (MemoryStream)this.window.DocumentStream;
byte[] bytes = reader.ToArray();
string html = Encoding.GetEncoding("shift_jis").GetString(bytes);