日期:2014-05-17  浏览次数:20761 次

关于 c#网页编码判断
小弟最近刚开始接触c#网络编程
做到网页获取的时候,用StreamReader逐行读取,检测"charset"的方式获取编码
然后重新初始化一个StreamReader进行读取的时候  发现读取位置比sr.ReadLine读到的位置还要往下移动了几行


string line;
using (Stream st = wr.GetResponseStream())
{
StreamReader sr = new StreamReader(st);
while ((line = sr.ReadLine()) != null)
{
if (line.Contains("charset="))
{
string nowEncoding = GetCharset(line);
if (nowEncoding != "UTF-8")
{
sr = new StreamReader(st, Encoding.GetEncoding(nowEncoding));
content = sr.ReadToEnd();
}
else
{
content = sr.ReadToEnd();
}
}
}
}
C# 编码 String UTF-8 网页编码

------解决方案--------------------
正则匹配捕获吧
------解决方案--------------------
var request = HttpWebRequest.Create("http://www.amazon.co.jp/");
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
    Regex regex = new Regex(@"(?<=charset=)\w+");
    var sr = new StreamReader(
        stream,
        Encoding.GetEncoding(regex.Match(response.ContentType).Value));
    Console.WriteLine(sr.ReadToEnd());
}


不要使用查找正文的方式搜索网页编码, 直接检查HTTP HEADER中的Content-Type
------解决方案--------------------
引用:
感谢你的方法   非常高效
不过由于想尽可能多的支持各种网站
这样查询的话   很多不太规范,header里不带有Content-Type的网站就没法支持了
所以还是需要一种可以高效地从正文中获取编码 并读取的网页的方法


那你只能使用浏览器的那套检测方法了…… 大概就是先检测字节顺序码 判断是不是UTF8, 再解析HTML查找meta标签,都没有办法判断就用系统当前语言了