zoukankan      html  css  js  c++  java
  • 获取html页面时如何选择合适的Encoding

    当我们通过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);
        }

  • 相关阅读:
    「2017 山东三轮集训 Day1」Flair
    Luogu P4321 随机漫游
    「WC2018」通道
    「CTSC2018」暴力写挂
    关于二项式相乘
    BZOJ #3625 CF #438E 小朋友和二叉树
    GIS可视化
    微信小程序Promise对象
    SQL Server-执行计划教会我如何创建索引
    IIS+NGINX 负载web服务器
  • 原文地址:https://www.cnblogs.com/TianFang/p/1211359.html
Copyright © 2011-2022 走看看