DOBON.NET DOBON.NETプログラミング掲示板過去ログ

[VS2005][VC#]WebBrowserのDocumentTextが文字化けします。

環境/言語:[XP、C#、VS2005、)、NET Framework2.0]
分類:[.NET]

こんにちは、いつもお世話になります。

表題の件、ご質問させていただきます。

現在VC#2005にてWebBrowserコントロールを使用して表示したサイトの
ソースをテキストファイルに保存しようとしています。

このソースをメンバのDocumentTextから取得出来そうだと思い、中身を
イミディエイトで見ますと以下の抜粋の様に文字化けとなっていました。

「平成17年12月8日</div>」である所が、「17N128</div>」に。

エンコードの関係かと思い色々と調べましたが、全く判りませんでした。
ぜひ皆さんのお知恵をお貸しください。

よろしくお願いします。
文字コードは正しいでしょうか?
UTF-8で扱う必要があるような気がします。

まったく外していたらすいません。
私も文字コードは疑ったのですが、VS2005はデフォルトでUTF-8と
どこかで見た気がします。テキスト出力時にはShift-JIS等に変換
出来ますが、もともと文字化けしてますのでShift-JISにしても
化けたままテキストにされます。

IDEの中で文字コードはどこかで変更って出来るのでしょうか?

■No14416に返信(ゆうさんの記事)
> 文字コードは正しいでしょうか?
> UTF-8で扱う必要があるような気がします。
>
> まったく外していたらすいません。
http://blog.livedoor.jp/salv/archives/cat_1172348.html
を参考にされると良いかもしれません。
こんにちは、ご回答ありがとうございます。
下記サイトを拝見させて頂きましたが、一通り見ましたが
関係のありそうな情報を見つける事が出来ませんでした。
よろしければどの辺の記述が教えて頂いても構いませんか?

■No14438に返信(ゆうさんの記事)
> http://blog.livedoor.jp/salv/archives/cat_1172348.html
> を参考にされると良いかもしれません。
私もはまりました。
euc-jpのページなどはDocumentTextでは化けてしまいます。
直接DocumentStreamを扱うことにより解決しました。

ケースが違うかもしれませんが、ソースを書いておきます。

直接吐く場合(文字コードをそのまま吐き出す)
FileStream f = new FileStream("test1.txt", FileMode.Create);
byte[] fb = new byte[webBrowser1.DocumentStream.Length];
webBrowser1.DocumentStream.Read(fb, 0, (int).DocumentStream.Length);
f.Write(fb, 0, fb.Length);
f.Close();

文字コード変換(eucをsjisに)
Encoding enceuc = Encoding.GetEncoding("euc-jp");
Encoding encsjs = Encoding.GetEncoding("shift_jis");
byte[] beuc = new byte[webBrowser1.DocumentStream.Length];
webBrowser1.DocumentStream.Read(beuc, 0, (int)webBrowser1.DocumentStream.Length);
byte[] bsjs = Encoding.Convert(enceuc, encsjs, beuc);
FileStream f = new FileStream("test.txt", FileMode.Create);
f.Write(bsjs, 0, bsjs.Length);
f.Close();

//byte[]をstringにするとき
string s=encsjs.GetString(bsjs);

DOBON.NET | プログラミング道 | プログラミング掲示板