http-кодировка ответа nodejs - PullRequest
       8

http-кодировка ответа nodejs

3 голосов
/ 27 февраля 2011

Возможно ли прочитать веб-страницу в кодировке не utf8?Например windows-1251.Я пытался преобразовать результат, используя node-iconv:

var convertedBody = new Iconv('windows-1251','utf-8').convert(responseBody));

Но я получаю исключение:

Error: EILSEQ, Illegal character sequence.
    at IncomingMessage.<anonymous> (/root/nodejstest/test2.js:22:19)
    at IncomingMessage.emit (events.js:59:20)
    at HTTPParser.onMessageComplete (http.js:111:23)
    at Socket.ondata (http.js:1183:22)
    at Socket._onReadable (net.js:654:27)
    at IOWatcher.onReadable [as callback] (net.js:156:10)

Спасибо!

Ответы [ 4 ]

7 голосов
/ 29 января 2012

Вот рабочее решение вашей проблемы. Сначала вы должны использовать Buffer и преобразовать вашу строку в двоичную.

request({ 
uri: website_url,
method: 'GET',
encoding: 'binary'
}, function (error, response, body) {
    body = new Buffer(body, 'binary');
    conv = new iconv.Iconv('windows-1251', 'utf8');
    body = conv.convert(body).toString();
     }
});
4 голосов
/ 26 ноября 2013

Взгляните на библиотеку iconv-lite .С его помощью ваш код может выглядеть так:

var iconv = require('iconv-lite');
request(
    { 
        uri: website_url,
        method: 'GET',
        encoding: 'binary'
    },
    function(err, resp, body){
        body = iconv.decode(body, 'win1251');
    }
);
3 голосов
/ 09 февраля 2015

Iconv не имеет windows-1251.

Список кодировок можно проверить из bnoordhuis / node-iconv .

Кстати, из википедии:

Windows-1251 и KOI8-R (или его украинский вариант KOI8-U) используются гораздо чаще, чем ISO 8859-5 .

0 голосов
/ 02 декабря 2016
const request = require('request');
const iconv = require('iconv-lite');

request({
    url: 'http://meta.ua',
    encoding: 'binary',
}, (err,res,body) => {
    if (err) throw err;

    var decoded = iconv.decode(res.body, 'win1251');

    console.log(decoded);
});
...