博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动判断网页编码
阅读量:5337 次
发布时间:2019-06-15

本文共 3661 字,大约阅读时间需要 12 分钟。

///         /// 获取指定URL的HTML源代码        ///         ///         /// 如果为NULL 则自动识别        /// 
public static string GetWebHtml(string url, Encoding encoding) { try { HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url); HttpWebResponse res; try { res = (HttpWebResponse)hwr.GetResponse(); } catch { return string.Empty; } if (res.StatusCode == HttpStatusCode.OK) { using (Stream mystream = res.GetResponseStream()) { //没有指定编码, if (encoding == null) { return DecodeData(mystream, res); } //指定了编码 else { using (StreamReader reader = new StreamReader(mystream, encoding)) { return reader.ReadToEnd(); } } } } return null; } catch { return null; } } private static string DecodeData(Stream responseStream, HttpWebResponse response) { string name = null; string text2 = response.Headers["content-type"]; if (text2 != null) { int index = text2.IndexOf("charset="); if (index != -1) { name = text2.Substring(index + 8); } } MemoryStream stream = new MemoryStream(); byte[] buffer = new byte[0x400]; for (int i = responseStream.Read(buffer, 0, buffer.Length); i > 0; i = responseStream.Read(buffer, 0, buffer.Length)) { stream.Write(buffer, 0, i); } responseStream.Close(); if (name == null) { MemoryStream stream3 = stream; stream3.Seek((long)0, SeekOrigin.Begin); string text3 = new StreamReader(stream3, Encoding.ASCII).ReadToEnd(); if (text3 != null) { int startIndex = text3.IndexOf("charset="); int num4 = -1; if (startIndex != -1) { num4 = text3.IndexOf("\"", startIndex); if (num4 != -1) { int num5 = startIndex + 8; name = text3.Substring(num5, (num4 - num5) + 1).TrimEnd(new char[] { '>', '"' }); } } } } Encoding aSCII = null; if (name == null) { aSCII = Encoding.GetEncoding("gb2312"); } else { try { if (name == "GBK") { name = "GB2312"; } aSCII = Encoding.GetEncoding(name); } catch { aSCII = Encoding.GetEncoding("gb2312"); } } stream.Seek((long)0, SeekOrigin.Begin); StreamReader reader2 = new StreamReader(stream, aSCII); return reader2.ReadToEnd(); }

 

转载于:https://www.cnblogs.com/ganler1988/p/3146144.html

你可能感兴趣的文章
管道,数据共享,进程池
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
加固linux
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>