写爬虫时肯定是要去考虑乱码的问题,刚开始自己没怎么有思路,最后看了亮哥解决乱码的博客。才明白,主要一下几点:
1:解析服务端返回的header中content-type. 得到编码,改编码是什么就按照什么去解析返回的字节流。
2:如果服务端header中没有content-type信息,就按照 utf-8 解析返回的内容 。再去解析meta标签 得到编码,并作为最终的解析服务端返回字节流的编码。(因为按照gbk 或者 utf-8 还是其他的编码 解析charset=utf-8 的结果都是一样的,因为它们都兼容ascii编码,也就是前2个字节的码表都一样)
3:如果标签meta中也没有编码的话,那么可以尝试着去 得到 en ,zh-CN ,zh. 然后用相应的编码解析返回的内容。
4:如果上面条件1,2,3都不满足的话,可以通过智能探测,如cpdetector,它是目前口碑最好的java实现的智能探测编码,是基于统计实现的,所以注定会有一定的错误率,有些特殊网页,它确实是不准确的,如网页的meta中charset和实际的浏览器识别的正常显示的charset不相同的情况,它的识别也是错误的。所以这种办法会有误判的的情况。并不是太好。不过经过前面的3部也基本能得到编码类型了。
5:还有一种情况就是国内的网页写的很不规范,比如实际类型是ut-8 ,但是写成charset=gbk….。这种情况也要考虑。目前想到的解决办法是,。。。不知道怎么做,明天问下亮哥。。。