如何解码节点中的gzip或utf-8响应?

我正在使用节点请求模块来做一些获取请求。我得到的响应体

{ body: '\u001f?\b\u0000\u0000\u0000\u0000\u0000...............' } 

我有这样的标题参数和请求,

 var params = { url: options.url, headers: { 'Accept-Encoding': "gzip, deflate", 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Charset' : 'utf-8', 'Content-Type' : 'application/json', 'User-Agent' : 'Mozilla/5.0' } }; request(params, function (error, response, body) { //response.setEncoding('utf8'); //response.setEncoding('binary'); console.log(response); }) 

我试过了

  //response.setEncoding('utf8'); //response.setEncoding('binary'); 

new Buffer(response.body, 'ascii').toString('utf8')来读取正文内容,但它不工作。

如何正确读取正文内容为JSON?

这工作使用zlib.createGunzip()

  var http = require("http"), zlib = require("zlib"); var req = http.request(url, function (res) { // pipe the response into the gunzip to decompress var gunzip = zlib.createGunzip(); res.pipe(gunzip); gunzip.on('data', function (data) { // decompression chunk ready, add it to the buffer buffer.push(data.toString()); }).on("end", function () { // response and decompression complete, join the buffer and return callback(null, buffer.join("")); }).on("error", function (e) { callback(e); }); }); req.on('error', function (e) { callback(e); }); req.end();