window下nodejs爬取gb2312网页出现乱码的解决方案
发布于 12 年前 作者 teary 28706 次浏览 最后一次编辑是 8 年前

linux环境下,我们可以通过 iconv 这个C++模块来处理Node.JS不支持的字符编码,如GBK,BIG5。

iconv需要依赖native库,这样一来,在一些不支持native模块安装的虚拟主机和windows平台上,我们还是无法安心处理GBK编码。 老外写了一个通过纯Javascript转换编码的模块 iconv-lite 可以实现window下的转换 ,通过npm可以安装此模块,bufferhelper是一个操作buffer的加强类,关于buffer的详细解析,请参考地址:http://www.infoq.com/cn/articles/nodejs-about-buffer 比如抓取baidu.com,

var http = require('http'), 
var url = require('url').parse('http://www.baidu.com/');
var iconv = require('iconv-lite'); 
var BufferHelper = require('bufferhelper');
 
http.get(url,function(res){
  var bufferHelper = new BufferHelper();
  res.on('data', function (chunk) {
    bufferHelper.concat(chunk);
  });
  res.on('end',function(){ 
    console.log(iconv.decode(bufferHelper.toBuffer(),'GBK'));
  });
})
15 回复

iconv这个类库在win下不能用, 换iconv-lite吧. 刚好这几天有在弄这个问题. 可以看下https://github.com/tomas/needle (有个iconv分支,我刚发了个issue,已解决, 应该这几天就更新上去了.)

iconv-lite不支持big5的吧

不错,就是这么搞滴。

gbk是罪……

弱问一下,卤煮怎么解析爬下来的东西呢?比如百度首页,是一大段字符串,怎么解析呢?比如我如果要找其中的某个div

jsdom不过那些有点重量级了(在内存中会创建dom树而且还解析js),cheerio是目前性能最好的(不解析js和其他资源)

iconv模块可以在Windows下用,先装Visual C++

@leizongmin 嗯, 后面发现了。node-gyp这个的github上有注明了必须安装3个东西才能在win下用。

PS: win7下, node x64是不能用jsdom和jquery这2个组件的,因为contextify不支持64位。

3ks, needle很好用。

嗯。果断采用楼主的方法,成功转码,感谢

冒昧问下,你是朴灵吗?

不要再用windows开发了, 那么多坑 怎么说的来着? “在windows上搞开发就像带着脚镣跳舞”

你可以试试

$ npm install nodegrassex
回到顶部