码迷,mamicode.com
首页 > Windows程序 > 详细

c# 获取网页源码,自动判断编码格式新方法!(转)

时间:2015-11-09 10:50:50      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

因采集需求,想解决网页编码识别问题。网上提出了很多方法。比如根据文件头字节判断,或根据网页的charset标识符判断。

我在实际应用中,这些方法都有各自的不足,比如有的网页charset写的是gbk,但实际是utf8。

于是想了一个个人认为比较新鲜的方法。将html下载回来后,做一份utf8副本和一份gbk副本,然后将utf8转换为bytes,判断bytes内是否有乱码标识(连续三个byte表示为239 191 189),如果有,则表示为乱码,直接使用gbk,如果没有,则表示没有乱码,直接使用utf8。

下面看看我的代码:

获取html

技术分享
                var data = new System.Net.WebClient { }.DownloadData(this.textBox1.Text); //根据textBox1的网址下载html
                var r_utf8 = new System.IO.StreamReader(new System.IO.MemoryStream(data),Encoding.UTF8); //将html放到utf8编码的StreamReader内
                var r_gbk = new System.IO.StreamReader(new System.IO.MemoryStream(data), Encoding.Default); //将html放到gbk编码的StreamReader内
                var t_utf8 = r_utf8.ReadToEnd(); //读出html内容
                var t_gbk = r_gbk.ReadToEnd(); //读出html内容
                if (!isLuan(t_utf8)) //判断utf8是否有乱码
                {
                    htm = t_utf8;
                    this.Text = "utf8";
                }
                else
                {
                    htm = t_gbk;
                    this.Text = "gbk";
                }
                this.textBox2.Text = htm;                
技术分享

判断是否有乱码

技术分享
        bool isLuan(string txt)
        {
            var bytes = Encoding.UTF8.GetBytes(txt);
            //239 191 189
            for (var i = 0; i < bytes.Length; i++)
            {
                if(i < bytes.Length - 3)
                if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189)
                {
                    return true;
                }
            }
            return false;
        }
技术分享

c# 获取网页源码,自动判断编码格式新方法!(转)

标签:

原文地址:http://www.cnblogs.com/sukb0917/p/4949112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!