1
phuslu 2013-05-28 09:12:58 +08:00
chardet
|
2
fishsjoy 2013-05-28 09:24:56 +08:00
非互联网公司的网页很多这样,chardet探测吧
|
3
alsotang 2013-05-28 12:57:50 +08:00
|
4
xingzhi 2013-05-28 13:21:06 +08:00
这是我以前写过的一段话,若有错误请指正:
对于网页编码的处理,一般是按以下几个顺序的: 1. 在http response headers, content-type中的charset属性值 2. 网页源码中, header里meta标签中, content属性中指定的charset值 3. xml文件中的encoding 4. 自动检测 可是,以上的情况,对于不遵循标准的网站来说,就会成问题了,例如: response headers没有提供charset response headers中的charset值与网页源码中的charset值不一样 如何解决? 我想的就是,浏览器怎么做,我就怎么做。 查了下资料,对于浏览器而言, 它也是按上述顺序来进行编码检测的, 并且: 当response headers没有提供charset时, 检测meta中的charset, 当两者不一样时,使用的是response headers中的charset。 |
5
xingzhi 2013-05-28 13:22:12 +08:00
补充: 之所以不直接使用chardet, 是因为它的处理速度比较慢。
可以在charset判断不出编码的情况下,再来使用chardet。 |
6
013231 2013-05-28 13:32:51 +08:00
|
7
luikore 2013-05-28 13:50:26 +08:00
这种网页也没什么爬的价值...
|
8
lookhi 2013-05-28 13:56:48 +08:00
国内的你可以直接尝试UTF8 不行就直接GBK或GB18030
如果还不行,就放弃。这种不标准的一般都在这2个内. |
9
xuan_lengyue 2013-05-28 14:42:36 +08:00
如果只是 GBK 和 UTF8 之间纠结的话可以检测的,UTF8 具有比较明显的特征,所以只要这段数据不是 UTF8 编码就是 GBK 了。
我目前用的一段代码见 https://gist.github.com/fireblue/5660870 基本上是 C 的,供楼主参考。 |