2011-07-15 1 views
1

私はウェブページのコンテンツを読むためのコードを書こうとしていますが、そのページで使用されているエンコーディングがわからないので、奇妙なシンボルがない正しい文字列を返すジェネリックコードを書くにはどうすればいいですか? ? エンコーディングは( "UTF-8"、 "windows-1256"、...)です。 私はUTF-8にしようとしましたが、ページが2番目のエンコーディングでエンコードされているときに、私はいくつかの奇妙なシンボルを持っています。HTMLコードをdifferntエンコードで読み込むための汎用コードを書くには?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SOME-URL"); 
request.Method = "GET"; 
WebResponse response = request.GetResponse(); 
StreamReader streamReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8); 
string content = streamReader.ReadToEnd(); 

そしてここでは、問題の原因のリンクです: http://forum.khleeg.com/144828.html

答えて

3

あなたはこのフィールドをチェックするために応答テキストを調べる必要があります。

ここ

は、私が使用しているコードです。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /> 

この文字も、ANSIと同様に正しくデコードされます。 このタグからのデータによると、あなたは、このようにGetEncoding方法であなたのEncodingオブジェクトを作成する必要があります。

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
var enc1 = Encoding.GetEncoding(response.ContentEncoding); 

または.CharacterSetプロパティ:

var enc1 = Encoding.GetEncoding("windows-1256"); 
var enc2 = Encoding.GetEncoding(1256); 

もう一つの方法は、HttpWebResponseのの.ContentEncodingプロパティを使用することです:

string Charset = response.CharacterSet; 
var enc1 = Encoding.GetEncoding(Charset); 
+0

しかし、そのタグは常にWebページに存在しますか?私は "windows-1256"を例として言及しました。これは他のエンコーディング、これを回避するための提案です。 – Mousa

+1

@Mousaこのタグは、非標準のエンコーディングを使用しているページに常にあります。しかし、私はこれに対する答えを更新しました。 – VMAtm

+3

'HttpWebResponse.ContentEncoding'の代わりに' HttpWebResponse.CharacterSet'を使うことができます。 –

0

あなたが言及したページには、正確にwhそれを使用しているエンコーディングは、ここに見つかった文字列です。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /> 

このような文字列を検索することはできませんか?

関連する問題