c#抓取的网页怎么自动判断编码

lshfong 2011-04-03 09:18:48
我是用的xmlhttp方法,怎么样从返回的文件流的头3位中判断出网页的编码。
用charset方法判断是不行的,网页中没有这个标签时会出错的
...全文
275 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hskire 2012-10-07
  • 打赏
  • 举报
回复
楼主,你找到方法了吗
lshfong 2011-04-13
  • 打赏
  • 举报
回复
这些方法都不是很好,有没有直接从返回的文件流中判断的
验证码识别 2011-04-03
  • 打赏
  • 举报
回复
HttpWebResponse response 里面有这个属性 CharacterSet
lshfong 2011-04-03
  • 打赏
  • 举报
回复
说了不用正则提取charset呀!要从返回的文件流中判断,而不是在字符中取charset判断。
子夜__ 2011-04-03
  • 打赏
  • 举报
回复
/// <summary>
/// 根据 url 获取网页编码
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetEncoding(string url)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader reader = null;
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
request.AllowAutoRedirect = false;

response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK && response.ContentLength < 1024 * 1024)
{
if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));
else
reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);

string html = reader.ReadToEnd();

Regex reg_charset = new Regex(@"charset\b\s*=\s*(?<charset>[^""]*)");
if (reg_charset.IsMatch(html))
{
return reg_charset.Match(html).Groups["charset"].Value;
}
else if (response.CharacterSet != string.Empty)
{
return response.CharacterSet;
}
else
return Encoding.Default.BodyName;
}
}
catch
{
}
finally
{

if (response != null)
{
response.Close();
response = null;
}
if (reader != null)
reader.Close();

if (request != null)
request = null;

}

return Encoding.Default.BodyName;
}

111,096

社区成员

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

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

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