在抓取网页的时候,得到它的编码方式是很重要的,直接决定抓取数据的正确性,这里介绍一种简单的获取方式。
在大多数网页中,都会使用meta来指定网页的编码,浏览器也会根据这个参数描述的编码方式进行编码,如:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
我们可以通过搜索这个参数的值获取编码方式,代码如下:
/// <SUMMARY>
/// 得到网页的编码方式
/// </SUMMARY>
/// <PARAM name="url"></PARAM>
/// <RETURNS></RETURNS>
private System.Text.Encoding GetPageEncoding(string url)
{
System.Text.Encoding encod = System.Text.Encoding.Default;
try
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
System.Net.WebResponse response = request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
byte[] header = new byte[1024];
stream.Read(header, 0, header.Length);
string head = Encoding.Default.GetString(header);
stream.Close();
stream.Dispose();
string patternEncode = "<META[^>]+charset\\s*=\\s*(?<EN>[\\w-]+)";
Regex regEncode = new Regex(patternEncode, RegexOptions.IgnoreCase);
Match match = regEncode.Match(head);
if (match.Success)
{
encod = System.Text.Encoding.GetEncoding(match.Groups["En"].Value);
}
}
catch
{ }
return encod;
}
这个方法,可以得到指定URL的编码方式,如果匹配不到网页上的参数,则使用当前系统默认编码方式进行返回。