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;
}
我要问的问题都在后边注释出来 了,知道的朋友麻烦告诉我一下,另外,下边被注释掉的代码是别人写的,和我用的类不一样,请问他为什么要用子类呢?而我自己写的代码运行会出什么问题吗?谢谢!
r.Headers.Set("Pragma", "no-cache");//请问这句有什么作用?
上面这句是为了清除缓存的。
Encoding en = Encoding.GetEncoding("utf-8");//请问这里换成unicode(为了保持和任何字符兼容)为什么反而是乱码?
上面这句是为了换成uft-8的编码格式,但是出现乱码,是因为网页本身不一定就是用这种格式啊。
谢谢你的回答,请问Unicode不是已经包含了世界上的任何字符吗?utf-8应该是属于它的子集对吧?我的理解是任何字符都能正常转换成Unicode字符,请告诉我为什么转换会是乱码?
@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")肯定可能出现乱码的。