读取网页编码问题

zwb521 2009-04-15 09:47:12
怎么识别网页编码,能够正确独处网页内容,如下是我的写法,读取有的网页有时会有编码问题,出现乱码

System.Net.WebRequest myRequest = System.Net.WebRequest.Create(Url);
System.Net.WebResponse myResponse = myRequest.GetResponse();
Stream searchStream = myResponse.GetResponseStream();
Encoding encoding = Encoding.UTF8;
string ContentType = encoding.EncodingName;
if (ContentType.IndexOf("utf-8") != -1)
encoding = Encoding.UTF8;
else if (ContentType.IndexOf("utf-7") != -1)
encoding = Encoding.UTF7;
else if (ContentType.IndexOf("unicode") != -1)
encoding = Encoding.Unicode;
StreamReader sreader = new StreamReader(searchStream, encoding);

求解
...全文
226 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcandyly20211 2009-04-16
  • 打赏
  • 举报
回复
友情up!
zwb521 2009-04-15
  • 打赏
  • 举报
回复
// 获取网页的HTML内容,指定Encoding
static string GetHtml(string url, Encoding encoding)
{
byte[] buf = new WebClient().DownloadData(url);
if (encoding != null) return encoding.GetString(buf);
string html = Encoding.UTF8.GetString(buf);
encoding = GetEncoding(html);
if (encoding == null || encoding == Encoding.UTF8) return html;
return encoding.GetString(buf);
}


和我说的这篇文章类似http://wenbloger.blogspot.com/2009/04/c_5580.html
我试了,在获取一些小站网页时到byte[] buf = new WebClient().DownloadData(url);就不走了,他自己不会超时,一直等待中时间很长
我姓区不姓区 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyi8808 的回复:]
可参考这个:
根据URL提取页面的Title,根据网页的charset自动判断Encoding

C# codeusingSystem;usingSystem.Net;usingSystem.Text;usingSystem.Text.RegularExpressions;classProgram
{//获取网页的HTML内容,根据网页的charset自动判断EncodingstaticstringGetHtml(stringurl)
{returnGetHtml(url,null);
}//获取网页的HTML内容,指定EncodingstaticstringGetHtml(stringurl, Encoding encoding)
{byte[] buf=newWeb…
[/Quote]
收藏
wuyq11 2009-04-15
  • 打赏
  • 举报
回复
wuyi8808 2009-04-15
  • 打赏
  • 举报
回复
可参考这个:
根据URL提取页面的Title,根据网页的charset自动判断Encoding

using System;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

class Program
{
// 获取网页的HTML内容,根据网页的charset自动判断Encoding
static string GetHtml(string url)
{
return GetHtml(url, null);
}

// 获取网页的HTML内容,指定Encoding
static string GetHtml(string url, Encoding encoding)
{
byte[] buf = new WebClient().DownloadData(url);
if (encoding != null) return encoding.GetString(buf);
string html = Encoding.UTF8.GetString(buf);
encoding = GetEncoding(html);
if (encoding == null || encoding == Encoding.UTF8) return html;
return encoding.GetString(buf);
}

// 根据网页的HTML内容提取网页的Encoding
static Encoding GetEncoding(string html)
{
string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
string charset = Regex.Match(html, pattern).Groups["charset"].Value;
try { return Encoding.GetEncoding(charset); }
catch (ArgumentException) { return null; }
}

// 根据网页的HTML内容提取网页的Title
static string GetTitle(string html)
{
string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>";
return Regex.Match(html, pattern).Groups["title"].Value.Trim();
}

// 打印网页的Encoding和Title
static void PrintEncodingAndTitle(string url)
{
string html = GetHtml(url);
Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html));
}

// 程序入口
static void Main()
{
PrintEncodingAndTitle("http://www.msdn.net/");
PrintEncodingAndTitle("http://www.cnblogs.com/");
PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/");
PrintEncodingAndTitle("http://www.csdn.net/");
PrintEncodingAndTitle("http://news.163.com/");
}
}
/* 程序输出:
[] [MSDN: Microsoft Developer Network]
[System.Text.UTF8Encoding] [博客园 - 程序员的网上家园]
[System.Text.UTF8Encoding] [空间/IV - 博客园]
[System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台]
[System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻]
*/
zwb521 2009-04-15
  • 打赏
  • 举报
回复
看到这篇文章,但他是用WEBClient,听说WebRequest比WEBClient快很多,不知真的假的,
http://wenbloger.blogspot.com/2009/04/c_5580.html

希望回答前最好测试下,我在网上找了一些,但都有BUG

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧