var request = require(“request”); var iconv = require(“iconv-lite”);
request.get(“http://www.163.com”,function(err,response,result){ var html = iconv.decode(new Buffer(result), ‘win1251’) //var html = iconv.decode(new Buffer(result), ‘gbk’) console.log(html) });
代码就是上面的
怎么都是乱码,不知道为什么??
result已经是decode过了的结果,也就是说它已经被转换成utf8了,再转换成 buffer 出来的结果必须是不正确的。 看下示例代码 https://github.com/ashtuchkin/iconv-lite#extend-nodejs-own-encodings 另外 request 有 pipe 方法,可以 pipe 到 iconv-lite 的 decodeStream 上面去
没试出来耶 一定是我的打开方式不对
var request = require(“request”); var iconv = require(“iconv-lite”);
request.get(“http://www.163.com”,function(err,response,result){ var d = iconv.decodeStream(‘win1251’) var r = response.pipe(d) console.log® });
如果按照1楼的说的话, 可能是这样的
request.get("http://www.163.com", function (err, response, result) {
}).pipe(iconv.decodeStream('gb2312')).collect(function (err, body) {
console.log(body);
});
如果就在终端输出. 在request
的时候加上encoding
避免自动转成UTF-8
的话, 就可以在返回的时候转码了. 不过可能是老办法了.
request.get("http://www.163.com", {encoding: "binary"}, function (err, response, result) {
console.log(iconv.decode(new Buffer(result, 'binary'), 'gb2312'));
});
@meteormatt 按你的来操作 都是乱码呀!~~
@wtcsy 好吧,看下面:
var iconv = require('iconv-lite');
var request = require('request');
request.get('http://www.163.com').pipe(iconv.decodeStream('gbk')).collect(function(err, body) {
console.log(body);
});
@wtcsy 我这里都是正常的…
@meteormatt @klesh 你们的都是对的!!! 我的错 我用的sublime test3的nodejs来打印的,居然打印不出来, 在命令行打印都是正确的 多谢各位!~~
为什么我打印的时候不是乱码 但是写入文件的时候又变成乱满了??? request.get(“http://www.163.com”, {encoding: “binary”}, function (err, response, result) { var html = iconv.decode(new Buffer(result, ‘binary’), ‘gbk’) console.log(html) fs.writeFileSync(“1.html”, html,“gbk”); });
@wtcsy 写文件用第一种方式就可以了.
request.get("http://www.163.com").pipe(iconv.decodeStream('gb2312')).pipe(fs.createWriteStream('1.html'));
@wtcsy 你首先要明白一点,node.js是以utf-8为中心的,iconv.decode 之后,返回的就是 utf-8 的串。 所以console.log输出是正确的。如果你需要的是 gbk 编码,那就不要转换了,直接写文件。 可是你在写的时候,又指定 gbk ,那编码又对不上了! 编码确实是个头疼的问题,但是没办法,电脑不是咱们发明的。
按9楼的方法,写出来的文件会是 utf8 的。
多谢楼上2位大神耐心解答!~