首页 新闻 搜索 专区 学院

请高手们帮忙看看这个获取网页源码的方法..谢谢!!

0
悬赏园豆:5 [已解决问题] 解决于 2012-01-04 12:55

C#,代码如下:

 private String GetWebContent(String Url)//下载URL的源代码
{
String strResult = "";
try
{
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
WebRequest r = WebRequest.Create(Url);
r.Timeout = 1000;
r.Headers.Set("Pragma", "no-cache");//请问这句有什么作用?
WebResponse rs = r.GetResponse();
Stream st = rs.GetResponseStream();
Encoding en = Encoding.GetEncoding("utf-8");//请问这里换成unicode(为了保持和任何字符兼容)为什么反而是乱码?
StreamReader sr=new StreamReader(st,en);
strResult = sr.ReadToEnd();

//request.Timeout = 10000;
//request.Headers.Set("Pragma", "no-cache");
//HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Stream streamReceive = response.GetResponseStream();

//Encoding encoding = Encoding.GetEncoding("utf-8");
//StreamReader streamReader = new StreamReader(streamReceive, encoding);
//strResult = streamReader.ReadToEnd();
}
catch (Exception ex)
{
utility.Logger.Error("获取页面源码出错:" + ex.Message);
MessageBox.Show("获取页面源码出错:" + ex.Message);
}
return strResult;
}

我要问的问题都在后边注释出来 了,知道的朋友麻烦告诉我一下,另外,下边被注释掉的代码是别人写的,和我用的类不一样,请问他为什么要用子类呢?而我自己写的代码运行会出什么问题吗?谢谢!

hexllo的主页 hexllo | 菜鸟二级 | 园豆:405
提问于:2011-12-27 16:23
< >
分享
最佳答案
0
 r.Headers.Set("Pragma", "no-cache");//请问这句有什么作用?

上面这句是为了清除缓存的。

Encoding en = Encoding.GetEncoding("utf-8");//请问这里换成unicode(为了保持和任何字符兼容)为什么反而是乱码?

上面这句是为了换成uft-8的编码格式,但是出现乱码,是因为网页本身不一定就是用这种格式啊。

收获园豆:5
LCM | 大侠五级 |园豆:6876 | 2011-12-27 16:27

谢谢你的回答,请问Unicode不是已经包含了世界上的任何字符吗?utf-8应该是属于它的子集对吧?我的理解是任何字符都能正常转换成Unicode字符,请告诉我为什么转换会是乱码?

hexllo | 园豆:405 (菜鸟二级) | 2011-12-28 08:43

@hexllo: Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。所以UTF-8并不等于Unicode。虽然你说的"utf-8应该是属于Unicode的子集"这句没错,但是这句还说明Unicode包含不只UTF-8这一种子集,所以你用Encoding.GetEncoding("utf-8")肯定可能出现乱码的。

LCM | 园豆:6876 (大侠五级) | 2011-12-28 09:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册