1 金钱
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
class abc
{
public static string getHtml(string url, string charSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码
{
WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
//获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
myWebClient.Credentials = CredentialCache.DefaultCredentials;
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer);
//string strWebData = Encoding.GetEncoding("gb2312").GetString(myDataBuffer);
//获取网页字符编码描述信息
Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)\"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string webCharSet = charSetMatch.Groups[2].Value;
if (charSet == null || charSet == "")
charSet = webCharSet;
Console.WriteLine("The page's charset is {0}, press any key", charSet);
if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);
Console.WriteLine(strWebData);
Console.ReadLine();
return strWebData;
}
static void Main(string[] args)
{
string url_s, codestr, strResult;
//url_s = "http://esf.bengbu.fang.com/";
url_s = "http://esf.bengbu.fang.com/house-xm2115937976/";
codestr = getHtml(url_s, "");
Console.WriteLine(codestr);
Console.ReadLine();
}
}
上面是源程序,在vs下能正常编译运行。
有个问题就是当url_s = "http://esf.bengbu.fang.com/"时,正常,
可是当url_s = "http://esf.bengbu.fang.com/house-xm2115937976/"时,输出是乱码怎么回事?
实际上,这两个网页,在浏览器上都能正常显示,浏览器用的编码是gb2312,看源码也是gb2312。
可是用这段代码下载,解码,然后结果就不同了,前一个正常,后一个就是乱码。
我来回答