3

非 utf8 エンコーディングで Web ページを読み取ることはできますか? たとえば、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

4 に答える 4

7

これがあなたの問題に対する実用的な解決策です。最初に 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();
     }
});
于 2012-01-29T00:17:20.377 に答える
4

iconv-liteライブラリを見てください。これを使用すると、コードは次のようになります。

var iconv = require('iconv-lite');
request(
    { 
        uri: website_url,
        method: 'GET',
        encoding: 'binary'
    },
    function(err, resp, body){
        body = iconv.decode(body, 'win1251');
    }
);
于 2013-11-26T15:38:01.237 に答える
3

Iconvにはありませんwindows-1251

bnoordhuis/node-iconvからエンコーディングのリストを確認できます。

ところで、ウィキペディアから:

Windows-1251 と KOI8-R (またはそのウクライナ版 KOI8-U) は、 ISO 8859-5よりもはるかに一般的に使用されています。

于 2015-02-09T19:18:20.297 に答える