C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: テキストの文字コードを変換する


(過去ログ 61 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■34981 / inTopicNo.1)  テキストの文字コードを変換する
  
□投稿者/ 教えてください (3回)-(2009/04/16(Thu) 01:25:06)

分類:[C#] 

(使用言語のバージョン VCSharp2008 EXPRESS)
質問があります。
webBrowserで表示したドキュメントのテキストの文字コードを変換するにはどのようにしたらよいでしょう?
webBrowser.Navigate("URL");
string html = webBrowser.DocumentText.ToString();
で、htmlファイルは手にはいるのですが、その文字コードがEUCの場合、文字化けしてしまいます。
byte [] bytesData;
bytesData = System.Text.Encoding.GetEncoding(51932).GetBytes(html);
html = System.Text.Encoding.UTF8.GetString(bytesData);
などのように変換しても、うまくいかないでいます。
ご指導お願いします。

引用返信 編集キー/
■34983 / inTopicNo.2)  Re[1]: テキストの文字コードを変換する
□投稿者/ 太郎冠者 (16回)-(2009/04/16(Thu) 03:14:55)
DocumentTextではなく、DocumentStreamプロパティを使いましょう。
変換する文字コードの種類はWebBrowser.HtmlDocument.Encodingで取得できます。
引用返信 編集キー/
■34989 / inTopicNo.3)  Re[2]: テキストの文字コードを変換する
□投稿者/ 教えてください (4回)-(2009/04/16(Thu) 10:27:00)
太郎冠者さん
ありがとうございます。
webBrowser.Navigate("URL");
string html = webBrowser.DocumentStream.ToString();
html = WebBrowser.HtmlDocument.Encoding.GetEncoding("EUC-JP");
とかでしょうか?
なんか根本的に間違えている気がします…。
とりあえずエラーで、'System.Windows.Forms.WebBrowser' に 'HtmlDocument' の定義がありません。
と出てます。
引き続きご指導お願いします。

引用返信 編集キー/
■35007 / inTopicNo.4)  Re[3]: テキストの文字コードを変換する
□投稿者/ 太郎冠者 (17回)-(2009/04/16(Thu) 13:31:16)
>WebBrowser.HtmlDocument
すいません、HtmlDocumentじゃなくてDocumentでしたorz
#HtmlDocumentは型名でしたね。

処理の仕方としてはDocumentStreaamをbyte配列に読込んで
HtmlDocument.Encodingを使ってbyte配列を文字列に変換
といった感じでしょうか。

こんな感じかな?
注:環境無いんで動作確認はしてません。

byte[] buf = new buf[webBrowser.DocumentStream.Length];
webBrowser.DocumentStream.Read(buf, 0 ,webBrowser.DocumentStream.Length);
Encoding ec = Encoding.GetEncoding(WebBrowser.HtmlDocument.Encoding);
String s = ec.GetString(buf);
引用返信 編集キー/
■35024 / inTopicNo.5)  Re[4]: テキストの文字コードを変換する
□投稿者/ 教えてください (5回)-(2009/04/16(Thu) 20:21:58)
ありがとうございます。
流れとしては、バイナリーデータをストリームで受けて、文字コードを変換して文字列にする、と理解できました。
試したところ、エラーがたくさん…。

byte[] buf = new buf(webBrowser.DocumentStream.Length);
webBrowser.DocumentStream.Read(buf, 0, webBrowser.DocumentStream.Length);
Encoding ec = Encoding.GetEncoding(WebBrowser.HtmlDocument.Encoding);
String s = ec.GetString(buf);

エラー	1	型または名前空間名 'buf' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
エラー	2	'System.IO.Stream.Read(byte[], int, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
エラー	3	引数 '3': 'long' から 'int' に変換できません。
エラー	4	'System.Windows.Forms.WebBrowser' に 'HtmlDocument' の定義がありません。

引き続きお願いします。

引用返信 編集キー/
■35026 / inTopicNo.6)  Re[5]: テキストの文字コードを変換する
□投稿者/ επιστημη (1891回)-(2009/04/16(Thu) 23:50:27)
επιστημη さんの Web サイト
> 試したところ、エラーがたくさん…。

「動作確認はしてません」て言うてはるやん。
バグ抜きはあなたの仕事。

ひとつだけ挙げるなら

× byte[] buf = new buf(webBrowser.DocumentStream.Length);
○ byte[] buf = new byte(webBrowser.DocumentStream.Length);

でしょうね。

引用返信 編集キー/
■35027 / inTopicNo.7)  Re[6]: テキストの文字コードを変換する
□投稿者/ 教えてください (6回)-(2009/04/17(Fri) 01:43:44)
アドバイス感謝です。
なんとか、次のようにして回避できました。
webBrowser.DocumentStream.Read(buf, 0 , (int)webBrowser.DocumentStream.Length);
Encoding ec = Encoding.GetEncoding("EUC-JP");
ありがとうございました。

解決済み
引用返信 編集キー/
■35030 / inTopicNo.8)  Re[7]: テキストの文字コードを変換する
□投稿者/ 太郎冠者 (18回)-(2009/04/17(Fri) 08:47:07)
ありゃりゃポカミス^^;
また同じこと繰り返してるし。。。>HtmlDocument
επιστημη さんフォローありがとうございます。


解決出来た様で何よりですが一つだけ気になることが。
>Encoding ec = Encoding.GetEncoding("EUC-JP");
ここEncoding名ベタ書きだとEUC-JP以外の場合に文字化けする恐れがあります。
それを回避するためのWebBrowser.Document.Encodingです。

ちゃんと書くならこうかな。
Encoding ec = Encoding.GetEncoding(webBrowser.Document.Encoding);
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -