http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4365|回复: 3

[其他] 急!!后天就要答辩。HttpHelper的无视编码部分不太清楚

[复制链接]
发表于 2013-6-7 22:43:36 | 显示全部楼层 |阅读模式
                  if (encoding == null)
                    {
                        Match meta = Regex.Match(Encoding.Default.GetString(RawResponse), "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase);  
                        string charter = (meta.Groups.Count > 2) ? meta.Groups[2].Value.ToLower() : string.Empty;   // 为什么正常情况下mata.Group有3个值
                        charter = charter.Replace("\"", "").Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk"); // 最后一个替换不是很理解
                        if (charter.Length > 2)
                            encoding = Encoding.GetEncoding(charter);
                        else
                        {
                            if (string.IsNullOrEmpty(response.CharacterSet))
                                encoding = Encoding.UTF8;
                            else
                                encoding = Encoding.GetEncoding(response.CharacterSet);        //为什么这里能够保证编码出来的一定不是乱码?
                        }
                    }
                    //得到返回的HTML
                    result.Html = encoding.GetString(RawResponse);

能否请版主解答下... 顺便问下 这个正则表达式
@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(??!</?a\b).)*)</a>";
我用来提取HTML页面链接的,对正则不太清楚,能否有高人能解释下这个正则.
时间紧迫~!!




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-8 09:11:12 | 显示全部楼层
  string charter = (meta.Groups.Count > 2) ? meta.Groups[2].Value.ToLower() : string.Empty;   // 为什么正常情况下mata.Group有3个值
这里是一个Bug,已修复了,在这里我表示对你的感谢

                        charter = charter.Replace("\"", "").Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk"); // 最后一个替换不是很理解
   这里的iso-8859-1是一个编码,而他在Gbk之内,所以可能直接用Gbk代替iso-8859-1

   encoding = Encoding.GetEncoding(response.CharacterSet);        //为什么这里能够保证编码出来的一定不是乱码?
这里是在所有情况下都无法取到编码时才会使用它,也就是说你一没有配置或者是指明编码,而网站的页面中又没有规定时才会使用这个,
这是一种机率问题,如果说绝对的无视编码我相信是不可能的,只能说是99%以上的,你要知道事情没有绝对。呵呵

发表于 2013-6-8 10:23:01 | 显示全部楼层
我自己写的程序, 跟你的差不多,
先用请求中的编码,如果没有就用 meta 里面的编码
但是 meta 的编码也不能百分百准确。
发表于 2013-6-8 10:41:21 | 显示全部楼层
qq576733600 发表于 2013-6-8 10:23
我自己写的程序, 跟你的差不多,
先用请求中的编码,如果没有就用 meta 里面的编码
但是 meta 的编码 ...

99%的都是对的,除非你的网站是A编码,你非要在meta 里写成是B编码,但这是少数,如果是这样就使用CharacterSet,这样基本上可以解决了, 你要想绝对的解决编码问题是不可能的,总要有一种是不行的,不过能达到95%以上就很不错了。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-15 01:12

© 2014-2021

快速回复 返回顶部 返回列表