写过爬虫的同学都知道,这是个很常见的问题了,一般处理思路是: 使用HttpWebRequest发送请求,HttpWebResponse来接收,判断HttpWebResponse中”Content-Type”中的具体编码,再利用StreamReader 将信息流转为具体的编码就OK了。
下面提供第一种思路的一般方法:
这种方法基本上解决了大部分的编码问题。 之所以说基本上也是因为有一些网页,在HttpWebResponse 返回的头部中”Content-Type” 有时候不能正确的匹配到具体编码类型,这个时候就会读到乱码。
下面提供一个我使用的方法,这个方法可以正确的将页面转码:
public static void getInnerHtmlAuto(string url)
{
try
{
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
byte[] htmlBuffer = wc.DownloadData(url);
Regex regex = new Regex("charset\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase);
string content=Encoding.Default.GetString(htmlBuffer);
Encoding encoding=Encoding.Default;
if(regex.IsMatch(content))
{
encoding=Encoding.GetEncoding(regex.Match(content).Groups[1].Value.Trim());
content=encoding.GetString(htmlBuffer);
}
outFileName = "C:\\log\\" + DateTime.Now.ToString().Replace(" ", "").Replace(":", "").Replace("-", "") + ".html";
using (StreamWriter sw = new StreamWriter(outFileName))//将获取的内容写入文本
{
sw.Write(content);
}
Console.WriteLine(outFileName); //输出保存后的文件名
}
catch (WebException webEx)
{
Console.WriteLine(webEx.Message.ToString());
}
}