获取html页面时如何选择合适的Encoding
2008-05-31 21:25
267 查看
当我们通过webrequest或其它socket方式获取一个html页面时,获取到的是一个tcp流,保存后也是一个字节数组。为了获取它的信息,还需将其解析为字符串。
解析的方式很简单,下面两句话即可轻松完成。
var reader = new
StreamReader(rsp.GetResponseStream());
var html = reader.ReadToEnd();
常用.net的IO库的朋友一看就知道,这种方式无法对中文页面解析,解析出来的中文是乱码,为了正确的解析中文,还需要选择合适的编码方式。
然而,中文的编码方式有很多种,常见的就有gb2312、utf-8、utf-16等。我以前通常是直接使用Encoding.Default来获取系统默认编码方式。这种方式大多数情况下使用,然而对于那些采用utf-8等方式的网页就无法解析。
如何获取页面的编码方式呢?答案在httphead的头信息中的charset信息中。然而有些网页却不包含charset的httphead。对于这些网页,大可以像我以前那样直接用系统默认编码。
一个简单的示例如下:
static
void Main(string[] args)
{
string url = "http://www.163.com";
var req = WebRequest.Create(url);
var rsp = req.GetResponse() as
HttpWebResponse;
var match = System.Text.RegularExpressions.Regex.Match(rsp.Headers.ToString(), "charset=(.+)");
var encodname = match.Groups[1].Value.Trim();
var encoder = match.Success ? Encoding.GetEncoding(encodname) : Encoding.Default;
var reader = new
StreamReader(rsp.GetResponseStream(), encoder);
var html = reader.ReadToEnd();
Console.WriteLine(html);
}
解析的方式很简单,下面两句话即可轻松完成。
var reader = new
StreamReader(rsp.GetResponseStream());
var html = reader.ReadToEnd();
常用.net的IO库的朋友一看就知道,这种方式无法对中文页面解析,解析出来的中文是乱码,为了正确的解析中文,还需要选择合适的编码方式。
然而,中文的编码方式有很多种,常见的就有gb2312、utf-8、utf-16等。我以前通常是直接使用Encoding.Default来获取系统默认编码方式。这种方式大多数情况下使用,然而对于那些采用utf-8等方式的网页就无法解析。
如何获取页面的编码方式呢?答案在httphead的头信息中的charset信息中。然而有些网页却不包含charset的httphead。对于这些网页,大可以像我以前那样直接用系统默认编码。
一个简单的示例如下:
static
void Main(string[] args)
{
string url = "http://www.163.com";
var req = WebRequest.Create(url);
var rsp = req.GetResponse() as
HttpWebResponse;
var match = System.Text.RegularExpressions.Regex.Match(rsp.Headers.ToString(), "charset=(.+)");
var encodname = match.Groups[1].Value.Trim();
var encoder = match.Success ? Encoding.GetEncoding(encodname) : Encoding.Default;
var reader = new
StreamReader(rsp.GetResponseStream(), encoder);
var html = reader.ReadToEnd();
Console.WriteLine(html);
}
相关文章推荐
- 如何把html(form1)中的值用Submit传给serch.aspx页面,在serch.aspx又如何获取呢?(收集)
- HTML页面如何象asp一样接受参数 选择自 qxg1123 的 Blog
- 【jQuery+html】JS如何在html页面获取PHP输出的变量
- select下拉框如何在本页面中获取其选择的值?
- 找不到好的方法,如何通过HttpWebRequest获取页面的Encoding。(转)
- 不同web如何通讯之 html页面获取传递的参数
- ASP.Net 如何让后台的cs页面获取到前台的html控件的值
- 如何在HTML页面中,用JavaScript获取application的值?
- HTML页面如何获取路径上的参数
- js如何获取当前页面字符编码? http://bbs.51js.com/thread-75687-1-1.html
- JQuery如何获取table中checkBox选中的多行的值并传到另一个html页面中
- 如何在HTML不同的页面中,共用头部与尾部?
- HTML 获取当前标签在页面的位置,并且把其他的浮动窗口显示过来
- 如何在页面上 获取Google 的 PageRank 的值
- 浅谈国内用户如何选择合适的VPS主机
- flask如何完成数据库内容在html页面上的显示以及相应数据的删除
- 如何选择Html.RenderPartial和Html.RenderAction
- 关于jsp页面中的pageEncoding和contentType以及html中的<meta标签中字符集的设置(转)
- [Web2.0]html页面如何通过js加载后台信息
- 页面中如何选择打印的范围