C#/为什么Get html会返回随机垃圾字符?

0 c# encoding webclient downloadstring

我有这个为ex: Link

这段代码:

const String nick = "Alex";
const String log = "http://demonscity.combats.com/zayavka.pl?logs=";
foreach (DateTime cd in dateRange)
{
string str = log + String.Format("{0:MM_dd_yy}", cd.Date) + "&filter=" + nick;
String htmlCode = wc.DownloadString(str);
}
Run Code Online (Sandbox Code Playgroud)

返回一些东西...."<\ b\0\0\0\0\0 \0я•XYsЫЦ~зЇёѕ™d)bг.тBҐ$ЪRЖ'<2УN&сh@р'"\ f\0J--_Фџђ§¤ нt|г6ќѕУЄђ0'IQtТґcμо№X(jі-Щ/Ђі|?g`yҐц"

其他链接工作正常.我认为问题在于代码页,我该如何解决?或者是服务器问题?

car*_*ira 7

问题是响应是GZip压缩的(响应有一个Content-Encoding: gzip标题).您需要先解压缩它,然后您才能读取它:

public class StackOverflow_6660689
{
    public static void Test()
    {
        WebClient wc = new WebClient();
        Encoding encoding = Encoding.GetEncoding("windows-1251");
        byte[] data = wc.DownloadData("http://demonscity.combats.com/zayavka.pl?logs=08_07_11&filter=Alex");
        GZipStream gzip = new GZipStream(new MemoryStream(data), CompressionMode.Decompress);
        MemoryStream decompressed = new MemoryStream();
        gzip.CopyTo(decompressed);
        string str = encoding.GetString(decompressed.GetBuffer(), 0, (int)decompressed.Length);
        Console.WriteLine(str);
    }
}
Run Code Online (Sandbox Code Playgroud)