写过爬虫的同学,都会遇到 “body怎么是乱码” 的类似问题。结合 charset 和 jschardet 两个模块,可以完整地探测出一个页面的具体文本编码。
废话不多说了,上代码 encoding.js
:
var urllib = require('urllib');
var charset = require('charset');
var jschardet = require('jschardet');
var url = process.argv[2] || 'http://www.taobao.com';
urllib.request(url, function (err, body, res) {
if (err) throw err;
var encoding = charset(res, body);
console.log('detect %j from charset', encoding);
if (!encoding) {
encoding = jschardet.detect(body).encoding;
console.log('detect %j from jschardet', encoding);
}
});
运行结果:
$ node encoding.js http://www.tmall.com
detect "gbk" from charset
$ node encoding.js http://tmall.com
detect null from charset
detect "ascii" from jschardet