Проблема с кодировкой при запросе JSON из API Stackru

Я не могу понять это для моей жизни. Ниже приведена реализация с модулем запроса, но я также попытался с модулем node-XMLHttpRequest безрезультатно.

var request = require('request');

var url = 'http://api.stackexchange.com/2.1/questions?pagesize=100&fromdate=1356998400&todate=1359676800&order=desc&min=0&sort=votes&tagged=javascript&site=stackru';

request.get({ url: url }, function(error, response, body) {
    if (error || response.statusCode !== 200) {
        console.log('There was a problem with the request');
        return;
    }

    console.log(body); // outputs gibberish characters like �
    console.log(body.toString()); // also outputs gibberish
});

Кажется, это проблема кодирования, но я использовал точно такой же код (с собственными объектами XHR) в браузере, и он работает без проблем. Что я делаю неправильно?

2 ответа

Решение

Содержание распаковано. Ты можешь использовать request а также zlib распаковать потоковый ответ от API:

var request = require('request')
   ,zlib = require('zlib');

var url = 'http://api.stackexchange.com/2.1/questions?pagesize=100&fromdate=1356998400&todate=1359676800&order=desc&min=0&sort=votes&tagged=javascript&site=stackru';

request({ url: url, headers: {'accept-encoding': 'gzip'}})
  .pipe(zlib.createGunzip())
  .pipe(process.stdout);  // not gibberish

(Ссылка: /questions/33150380/nodejs-prostyie-http-zaprosyi-so-szhatiem-gzipdeflate/33150395#33150395)

Хотя ответ Перо правильный, есть более простой способ сделать это.

Поскольку вы используете запрос, вы также можете просто добавить gzip: true флаг:

var request = require('request');

var url = 'http://api.stackexchange.com/2.1/questions?pagesize=100&fromdate=1356998400&todate=1359676800&order=desc&min=0&sort=votes&tagged=javascript&site=stackru';

request.get({ url: url, headers: {'accept-encoding': 'gzip'}, gzip: true }, function(error, response, body) {
    console.log(body); // not gibberish
});
Другие вопросы по тегам