nodejs http response encoding

11,188

Solution 1

Here is working solution to your problem. You have to use Buffer and convert your string to binary first.

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();
     }
});

Solution 2

Take a look at the iconv-lite library. Using it your code may look like this:

var iconv = require('iconv-lite');
request(
    { 
        uri: website_url,
        method: 'GET',
        encoding: 'binary'
    },
    function(err, resp, body){
        body = iconv.decode(body, 'win1251');
    }
);

Solution 3

Iconv doesn't has windows-1251.

You can verify the list of encodings from bnoordhuis/node-iconv.

BTW, from wikipedia:

Windows-1251 and KOI8-R (or its Ukrainian variant KOI8-U) are much more commonly used than ISO 8859-5.

Share:
11,188
chardex
Author by

chardex

Updated on June 06, 2022

Comments

  • chardex
    chardex almost 2 years

    Is in possible to read web page in non utf8 encoding? For example windows-1251. I tried to convert result using node-iconv:

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

    But I get exception:

    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)
    

    Thanks!