CNode

window下nodejs爬取gb2312网页出现乱码的解决方案

Tteary发布于14 年前最后回复13 年前15 回复30138 浏览0 收藏

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)

T
teary#1·13 年前
引用 JacksonTian不错,就是这么搞滴。

冒昧问下,你是朴灵吗?

A
anubiskong#2·13 年前

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

X
XadillaX#3·13 年前

你可以试试

$ npm install nodegrassex
A
atian25#5·14 年前

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

B
bingo#6·14 年前

iconv-lite不支持big5的吧

J
JacksonTian#7·14 年前

不错,就是这么搞滴。

T
tangzx#8·14 年前

gbk是罪……

C
cony138#9·14 年前

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

T
teary#10·14 年前
引用 cony138弱问一下,卤煮怎么解析爬下来的东西呢?比如百度首页,是一大段字符串,怎么解析呢?比如我如果要找其中的某个div

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

A
atian25#13·14 年前
引用 atian25iconv这个类库在win下不能用, 换iconv lite吧. 刚好这几天有在弄这个问题. 可以看下https://github.com/tomas/needle (有个iconv分支,我刚...

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

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

F
fyddaben#14·13 年前

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

参与回复
登录后即可参与回复。登录