2

Web サイトから応答を取得するための簡単なコードがありますが、小さな問題が 1 つあります。ロシアのWebサイトから応答を得ようとしています.1つのWebサイトからは記号を知らず、他のWebサイトからは通常のテキストを取得しています. どこに問題があるのでしょうか?

返信先: www.kinopoisk.ru

������ � ����...

返信先: www.yandex.ru

Греция - Чехия。1:2...

    HttpWebRequest http = (HttpWebRequest) HttpWebRequest.Create("http://");
    http.Timeout = 30000;
    http.KeepAlive = true;
    http.ContentType = "application/x-www-form-urlencoded";
    http.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";
    http.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    http.Proxy = null;

    WebResponse response = http.GetResponse();
    Stream istream = response.GetResponseStream();
    StreamReader reader = new StreamReader(istream);

    Response.Write(reader.ReadToEnd());

    reader.Close();
4

2 に答える 2

7

kinopoisk.ruとしてエンコードされます (これはヘッダー WINDOWS-1251 で確認できます)。Content-Type

Encoding.GetEncoding(1251)それをデコードするには、StreamReader に渡す必要があります。

于 2012-06-12T19:17:16.527 に答える
1

これは文字セットの問題です。リクエストのレスポンスの文字セットを取得したい場合、HttpWebResponse クラスは CharacterSet という名前のプロパティを提供します。このプロパティは文字列型の値を返します。

myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
myWebRequest.Method = "GET";
myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
string str = myWebResponse.CharacterSet;

応答をエンコードするために使用されるエンコード方法を取得したい場合は、この目的のために、ContentEncoding という名前の HttpWebRequest クラスのプロパティがあります。このプロパティは文字列値を返します。

myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
myWebRequest.Method = "GET";
myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
string str = myWebResponse.ContentEncoding;
于 2012-06-12T19:26:35.757 に答える