3

ベトナムの Web サイトhttp://vnexpress.netから応答を取得するための簡単なコードがありますが、小さな問題があります。最初は正常にダウンロードされますが、その後、コンテンツに次のような不明な記号が含まれています:�\b\0\0\0\0\0\0�\a`I�%&/m....何が問題ですか?

    string address = "http://vnexpress.net";
    WebClient webClient = new WebClient();
    webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 AlexaToolbar/alxg-3.1");
    webClient.Encoding = System.Text.Encoding.UTF8;
    return webClient.DownloadString(address);
4

3 に答える 3

9

応答がGZippedであることがわかります。WebClient派生クラスを作成し、基礎HttpWebRequestを変更して自動解凍を許可しない限り、を使用してダウンロードする方法はないようです。

これを行う方法は次のとおりです。

    public class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            var req = base.GetWebRequest(address) as HttpWebRequest;
            req.AutomaticDecompression = DecompressionMethods.GZip;
            return req;
        }
    }

そしてそれを使用するには:

string address = "http://vnexpress.net";
MyWebClient webClient = new MyWebClient();
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 AlexaToolbar/alxg-3.1");
webClient.Encoding = System.Text.Encoding.UTF8;
return webClient.DownloadString(address);
于 2013-02-23T00:09:10.277 に答える
1

コードを試してみてください。問題ありません。

string address = "http://vnexpress.net";

WebClient webClient = new WebClient();

webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.2; WOW64)   AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 AlexaToolbar/alxg-3.1");

return Encoding.UTF8.GetString(Encoding.Default.GetBytes(webClient.DownloadString(address)));             
于 2013-02-22T23:37:17.100 に答える
0

DownloadStringでは、サーバーがContent-Type応答ヘッダーで文字セットを正しく示す必要があります。Fiddlerで見ると、サーバーが代わりにHTML応答本文のMETAタグ内に文字セットを送信していることがわかります。

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

このような応答を処理する必要がある場合は、HTMLを自分で解析するか、FiddlerCoreなどのライブラリを使用してこれを行う必要があります。

于 2013-02-22T23:50:54.137 に答える