@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

[C#]GetResponseStreamで得たストリームデータの文字コード判定について

1
投稿者投稿内容
Terol
会議室デビュー日: 2005/11/04
投稿数: 15
投稿日時: 2006-02-07 22:05
GetResponseStreamメソッドにてインターネットリソースから取得したストリームデータの文字コード自動判定で悩んでいます。
C#における文字コードの自動判定については、

<dobon.net>-<文字コードを判別する>
http://dobon.net/vb/dotnet/string/detectcode.html

にて勉強させていただきました。

System.IO.FileStream fs = new System.IO.FileStream(
TextBox1.Text, System.IO.FileMode.Open,System.IO.FileAccess.Read);
byte[] bs = new byte[fs.Length];
//byte配列に読み込む
fs.Read(bs, 0, bs.Length);
fs.Close();

ですが、上記のプログラムをGetResponseStreamメソッドに当てはめて作成することで行き詰まってしまいました。GetResponseStreamを使って、TextBox1.Textに代入する文字列を、
StreamReader reader1 =
  new StreamReader(StreamData,Encoding.GetEncoding("Shift_JIS"));
TextBox1.Text=reader1.ReadToEnd();
と取得しているため、もとのストリームデータが失われどうしても、正しい文字コード判定ができなくなってしまいます。どのようにすればいいのでしょうか?

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-02-07 22:19
引用:

Terolさんの書き込み (2006-02-07 22:05) より:
StreamReader reader1 =
  new StreamReader(StreamData,Encoding.GetEncoding("Shift_JIS"));
TextBox1.Text=reader1.ReadToEnd();
と取得しているため、もとのストリームデータが失われどうしても、正しい文字コード判定ができなくなってしまいます。どのようにすればいいのでしょうか?


処理の最初から、最後までバイナリデータとして扱ってください。文字列ではないものを、文字列に変換して扱おうとした時点で(Unicodeに変換しようとした時点で)、データは破壊されもとの意味を失ってしまいます。質問の内容からも、その事は承知しているのですよね。なら、そうしないようにしてください。

それとも何か理由があって、TextBox1.Textに代入することや、代入したことでデータが失われることを避けられないのですか?

仮にそうだとしてもShiftJISとして文字コードを破壊するのではなく、BASE64など可逆性を確保した形で変換して表示すればよいですよね。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
Terol
会議室デビュー日: 2005/11/04
投稿数: 15
投稿日時: 2006-02-09 04:00
「甕星」さん、的確なアドバイスありがとうございます。
思い通りにプログラムが動作し、文字コードを自動判別することができました。
しようもない質問にも、親切に教えていただいたこと感謝します。
1

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