c# 获取网页源码,自动判断编码格式新方法!
因采集需求,想解决网页编码识别问题。网上提出了很多方法。比如根据文件头字节判断,或根据网页的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; }
雕虫小技,在此献丑了!暂时没发现问题,欢迎大家测试反馈!谢谢!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验