2013-02-22 21 views
3

我有一个简单的代码来获得越南网站的回复:http://vnexpress.net,但有一个小问题。这是第一次,它下载确定,但在此之后,内容包含这样的未知符号: \ b \ 0 \ 0 \ 0 \ 0 \ 0 \0 \a`I %&/m ....问题是什么?无法下载utf-8的网页内容

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); 
+1

你是如何看到那些未知的符号? – Lloyd 2013-02-22 23:14:12

回答

9

你会发现响应是GZipped。除非您创建派生类并修改底层的HttpWebRequest以允许自动解压缩,否则似乎没有办法使用WebClient来下载它。

这里是你会怎么做:

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

你确定吗?根据文档,将'webClient.Encoding'设置为UTF-8将导致它下载为UTF-8。 – 2013-02-22 23:52:33

0

DownloadString要求服务器正确地指示在Content-Type响应报头的字符集。如果您在观看提琴手,你会看到该服务器,而不是发送的字符集META标记中的HTML响应正文:

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

如果您需要处理这样的反应,你需要或者解析HTML或者使用像FiddlerCore这样的库为你做这件事。

+0

实际上,如果响应是UTF-8,即使服务器不能识别标题中的编码,“DownloadString”也可以正常工作。现在,如果编码不是UTF-8,那么所有投注都关闭。 – 2013-02-23 00:11:10