- PR -

HTMLを取得すると文字化けしてしまう・・・

1
投稿者投稿内容
masatok2
ベテラン
会議室デビュー日: 2003/10/05
投稿数: 81
投稿日時: 2003-10-05 00:21
ASP.NET C#.NETにて「URL」を入れ実行すると
そのHPのHTMLを取得してブラウザ内テキストボックスに表示するPGM
なのですが、2バイト文字部分が化けて仕舞います。
エンコードの問題だと思うのですが、ご存じの方御願いします。

private void btnGet_Click(object sender, System.EventArgs e)
{
WebClient client = new WebClient();
Stream strm = client.OpenRead(txtUrl.Text);
StreamReader sr = new StreamReader(strm);
txtHtm.Text = sr.ReadToEnd();
}



[ メッセージ編集済み 編集者: masatok2 編集日時 2003-10-05 12:30 ]
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2003-10-06 08:56
たぶん何度も何度も出ている話題です。

.NET Tipsなら
http://www.atmarkit.co.jp/fdotnet/dotnettips/036fileread/fileread.html
ここでも参照してください。

ほとんど「 Encoding の指定なしによる文字化け(StreamReader とかはデフォルトの Encoding 指定が UTF-8 になっている)」ですんで確認してください。

一応その他の原因、注意点もありますので、書いておきます。

・http でダウンロードしてくる場合 http ヘッダーを見ているサーバーが時々あります。User-Agent で切り替えたりとか Accept-Langauage みてたりとか。反応が変わる場合がありますので気をつけましょう。
・ReadToEnd を http の Stream で読み出すと昔そこでとまったことがあります。 Keep-Alive のせいだと思うのですが…。
・「使った Stream」は閉じましょう。

少しまじめにコードを書くと…

コード:
using System;
using System.Text;
using System.Net;

...

private Encoding estimateEncoding(byte[] textBinary)
{
  //ここでは固定で Shift-JIS を返します。
  //Encoding が不定の場合や別の場合は変更。
  return Encoding.GetEncoding("Shift-JIS");
}

private string downloadWebPage(Uri uri)
{
  //パラメータチェック
  if( uri==null )throw new ArgumentNullException("uri");
  if( uri.Scheme != Uri.UriSchemeHttp &&
      uri.Scheme != Uri.UriSchemeHttps &&
      uri.Scheme != Uri.UriSchemeFile )throw new ArgumentException("uri");

  WebClient wc = new WebClient();
  wc.BaseAddress = uri; //これいらないかも

  //Header 設定(適当に変更して)
  wc.Headers.Add("Accept-Language", "ja"); //日本語要求
  wc.Headers.Add("User-Agent", @"Mozilla/4.0 (compatible; 
MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"); //User-Agent = IE 6.0

  byte[] buf = wc.DownloadData(uri.AbsoluteUri);
  Encoding enc = estimateEncoding(buf);
  return enc.GetString(buf);
}



たぶんこの場合は Encoding が違うだけでしょうけど、きちんと作るのなら、WebPage 取得は色々とやらなきゃいけないことは多いですよん。
masatok2
ベテラン
会議室デビュー日: 2003/10/05
投稿数: 81
投稿日時: 2003-10-06 20:57
大変お世話になります。
早速試して見ます、成功しましたら、またカキコしますので
よろしく御願いします。
1

スキルアップ/キャリアアップ(JOB@IT)