0

WebClient または HttpWebResponce/Request のエンコーディングが、ブラウザでページ ソースを見ているときと比べて異なるのはなぜですか? さらに、適切なエンコーディングが見つからない場合、奇妙な記号が表示されます。たとえば、 http://www.li.ruをダウンロードしようとすると 、ページ ソースでは utf-8 になり、WebClient または HttpWebResponce/Request からは windows-1251 になります。

どんな助けでも大歓迎です。

4

1 に答える 1

0

要求する Web ページでエンコーディングを強制的に同じにする必要があります。

WebClient を使用して、次のことを行います。

using(WebClient webClient = new WebClient())
{
    webClient.Encoding = Encoding.UTF8;
    string s = webClient.DownloadString("http://wwww.li.ru");
}

HttpWebResponse/Request の場合:

HttpWebRequest webRequest = HttpWebRequest.CreateHttp("http://www.li.ru");
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
{
    using (Stream resStream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(resStream, Encoding.UTF8);
        return reader.ReadToEnd();
    }
}

編集:

固定エンコーディングを次のコードに拡張するだけです。

var enc = Encoding.Default;
if (!string.IsNullOrEmpty(response.CharacterSet))
{
    var charSet = response.CharacterSet;
    if (charSet == "ISO-8859-1")
        charSet = "windows-1251";

    enc = Encoding.GetEncoding(charSet);
}

StreamReader reader = new StreamReader(resStream, enc);
return reader.ReadToEnd();

詳細については、このページをご覧ください: http://blogs.msdn.com/b/feroze_daud/archive/2004/03/30/104440.aspx

于 2013-07-23T09:54:25.247 に答える