2011-07-12 116 views
0

我有这个为前: LinkC#/为什么Get html会返回随机垃圾字符?

此代码:

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); 
} 

回报的东西......“<\ B \ 0 \ 0 \ 0 \ 0 \ 0 \0я•XYsЫЦ〜зЇёѕ ™d)bг.тBҐ$ЪRЖ '<2УN&с[email protected]р'“\˚F\ 0J --_Фџђ§¤нt|г6ќѕУЄђ0'IQtТґcμо№X(jі-Щ/Ђі|?g`yҐ¶ц”

其他链接正常工作 我认为问题出在Codepage上,我该如何解决它?或者它是服务器问题?

回答

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); 
    } 
} 
+0

太好了,谢谢!我如何找到内容编码? – kfhh

0

我认为这是它不应该,除非客户明确接受的格式gzip格式返回结果。

+0

谢谢!你是对的 – kfhh