文字コード判別ルーチン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へ変換する
No.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 …
No.2
- 回答日時:
どうやっても「絶対に完璧な自動判定」は不可能なので, あきらめるしかないこともあります.
「どういうものがどのように誤判定されるのか」がわかればもうちょっとなんかできるかもしれんが....
「絶対に完璧な自動判定」は不可能 ← この厳しい現実を受け容れなくてはならないのでしょう
でも ・・・・・・・・・・ もう少しだけジタバタしてみます
男ですが、生まれつき諦めが悪いところがあるんです
ありがとうございました
No.1
- 回答日時:
ブラウザの自動判別でも誤変換が発生する訳ですから、これで誤判定が含まれるのは避け得ないんじゃないでしょうか?
せめて『ブラウザの自動判別でも誤変換』程度まで精度を向上させたいと愚考しております
ですからWebReponseHeaderのContent-TypeかHTML文のMetaTagにあるcharset指定も参照してみます
でもブラウザはどのようにして判定しているのでしょうか???
その判定ソフト、何処かに落ちていれば良いのですが・・・・・・
『これで誤判定が含まれるのは避け得ないんじゃないでしょうか?』 ← 慰めて頂き誠にありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字コード判別ルーチンGet...
-
ラジオボタンのチェックをEnter...
-
VBAで配列の計算
-
VB.NET2008で麻雀プログラミング
-
複数のテキストボックスに同じ...
-
ジャグ配列とは
-
全取得したデータをjspで順番に...
-
実数からの小数部の取得
-
c# デリゲート関連の命名について
-
javaで電卓を作りたいのですが...
-
ダブルクォーテーションのrepla...
-
C# タスクバーを隠したフォーム...
-
ArrayList内HashMapの取得
-
javaのCSVデータ読込についてです
-
ArrayListを利用する問題
-
VB6,論理演算子Orの使い方がわ...
-
csv出力について
-
Selenium IDEでexportしたコー...
-
ページング
-
yyyymmddからyyyy/mm/d...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで配列の計算
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
C言語 重複しない4ケタの乱数...
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
応用情報技術者試験の令和元年...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
VBでbyte配列型のインスタンス...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
遅延バインディングを使用でき...
-
Visual C++ でコントロールを...
-
Excel VBAで配列の途中から(X)M...
-
C++、クラスメンバの構造体配列...
-
C言語で3次元配列の課題をして...
-
For文と配列
-
【MFC】GetCount()とGetSize()...
おすすめ情報