C#获取网页源码,自动判断网页字符集编码

该博客介绍了一个C#方法,用于获取网页源码并自动判断其字符集编码。通过WebClient下载网页数据,然后使用正则表达式从源码中提取字符集信息,对比系统默认编码,如有必要则使用网页指定的编码重新解析源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决方案:先采用系统默认的编码从stream里得到源码,再使用正则表达式获取源码中的[获取网页字符编码描述信息],这个信息,一般来说, 网页里都会有的,在网页源码的<head>里,类似这样的代码:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />(其实不一样完全这样,有些不规范的,没有双引号,或者最后面没有/闭合,所以,正则表达式得考虑周全些),从这个代码里来获取编码信息,再判 断系统当前的默认编码是否和这个一样,如果不同,再使用网页中取到的编码来重新从stream里解释取得网页源码。
 /// <summary>
        /// C#获取网页源码,自动判断网页字符集编码
        /// http://www.taobaonzpd.com/ | http://www.anmoqi10.com/ | http://www.hainandh.com/ | http://www.tb10go.com/ | http://www.tbshc.com/
        /// </summary>
        /// <param name="url">url是要访问的网站地址</param>
        /// <param name="charSet">charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码</param>
        /// <returns></returns>
        public static string getHtmlAuto(string url, string charSet)
        {
            WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient 
            // 需要注意的: 
            //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等 
            //这是就要具体问题具体分析比如在头部加入cookie 
            // webclient.Headers.Add("Cookie", cookie); 
            //这样可能需要一些重载方法。根据需要写就可以了 

            //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。 
            myWebClient.Credentials = CredentialCache.DefaultCredentials;
            //如果服务器要验证用户名,密码 
            //NetworkCredential mycred = new NetworkCredential(struser, strpassword); 
            //myWebClient.Credentials = mycred; 
            //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) 
            byte[] myDataBuffer = myWebClient.DownloadData(url);
            string strWebData = Encoding.Default.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;

            if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
                strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);
            return strWebData;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值