アプリ版:「スタンプのみでお礼する」機能のリリースについて

文字コード判別ルーチンGetCodeの使用方法

メールマガジン「.NETプログラミング研究」で紹介されている文字コード判別ルーチンGetCode(http://dobon.net/vb/dotnet/string/detectcode.html)を利用してサイトからダウンロードしたHTMLの文字コード変換をしています
思う通りに変換出来ることもありますが、目も眩むような宇宙語になってしますことも多々あります
このGetCodeルーチンは既にVB.NETでもC#でも相当な実績があると評価されています
ですから使用方法の誤りなのでしょう
ご指摘頂ければ幸いです
ソース(C#)は下記の通りです

string MyReadString; //変換後のHTML文書が格納される

using ( WebClient MyClient = new WebClient())
using ( Stream MyStream = MyClient.OpenRead(http://www.~~))
using ( MemoryStream MyMemoryStream = new MemoryStream())
{
byte[] ByteBuffer = new byte[4096]; //サイトからHTML文書を
MyMemoryStream.Seek(0, SeekOrigin.Begin); // Memory Streamに読込み
while (true)
{
int ReadByteLength = MyStream.Read(ByteBuffer, 0, ByteBuffer.Length);
if (ReadByteLength <= 0) { break; } //読込み終了
MyMemoryStream.Write(ByteBuffer, 0, ByteBuffer.Length);
}

byte[] AllHTML = new byte[MyMemoryStream.Length]; //全HTML文書を
MyMemoryStream.Seek(0, SeekOrigin.Begin); // byte配列に読込み
MyMemoryStream.Read(AllHTML, 0, AllHTML.Length);

System.Text.Encoding enc = GetCode(AllHTML); //文字コードを判定する ←←←この箇所です
MyReadString = enc.GetString(AllHTML); //判定された文字コードで
} // byte配列からstringへ変換する

A 回答 (3件)

1,文字コードの自動判定に関して


 自動化を完璧にするのは無理と思われます。
 文中のプログラムをどのように活用されるのかは分かりませんが、
 呼び出し側が自動判定以外に任意の文字コードを指定できるようにする方が個人的には良いと思います。

2,MyMemoryStream.Write(ByteBuffer, 0, ByteBuffer.Length); の部分ですが、
 MyMemoryStream.Write(ByteBuffer, 0, ReadByteLength);が正しいのではありませんか?
 ReadByteLengthが4096以下の場合に余分なゴミデータをMemoryStreamに書き込んでいると思われます。
 念のためデバッグで確認してみてください。

3,以下の部分でMemoryStream からbyte配列にコピーしているようですが、
 MemoryStream.ToArrayを使用すれば、コピーを自分で書く必要はないはずです。
//ここから
 byte[] AllHTML = new byte[MyMemoryStream.Length]; //全HTML文書を
 MyMemoryStream.Seek(0, SeekOrigin.Begin); // byte配列に読込み
 MyMemoryStream.Read(AllHTML, 0, AllHTML.Length);
//ここまでを
//下の行にする
 byte[] AllHTML = MyMemoryStream.ToArray();

□参考URL
MemoryStream.ToArray メソッド
http://msdn.microsoft.com/ja-jp/library/system.i …
    • good
    • 0
この回答へのお礼

ありがとうございました
早速プログラムを修正してテスト致します
今後とも宜しくご指導の程お願い申上げます

お礼日時:2010/07/22 13:24

どうやっても「絶対に完璧な自動判定」は不可能なので, あきらめるしかないこともあります.


「どういうものがどのように誤判定されるのか」がわかればもうちょっとなんかできるかもしれんが....
    • good
    • 0
この回答へのお礼

「絶対に完璧な自動判定」は不可能 ← この厳しい現実を受け容れなくてはならないのでしょう
でも ・・・・・・・・・・ もう少しだけジタバタしてみます
男ですが、生まれつき諦めが悪いところがあるんです
ありがとうございました

お礼日時:2010/07/22 13:33

ブラウザの自動判別でも誤変換が発生する訳ですから、これで誤判定が含まれるのは避け得ないんじゃないでしょうか?

    • good
    • 0
この回答へのお礼

せめて『ブラウザの自動判別でも誤変換』程度まで精度を向上させたいと愚考しております
ですからWebReponseHeaderのContent-TypeかHTML文のMetaTagにあるcharset指定も参照してみます
でもブラウザはどのようにして判定しているのでしょうか???
その判定ソフト、何処かに落ちていれば良いのですが・・・・・・

『これで誤判定が含まれるのは避け得ないんじゃないでしょうか?』 ← 慰めて頂き誠にありがとうございました

お礼日時:2010/07/22 13:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!