2011-02-27 90 views
2

是否可以讀取非UTF8編碼的網頁?例如windows-1251。 我嘗試使用節點的iconv轉換結果:nodejs http響應編碼

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) 

謝謝!

+1

您是否已經對谷歌的NodeJS組檢查出[此線程(http://groups.google.com/group/nodejs/browse_thread/thread/b2603afa31aada9c)?似乎針對您的問題... – schaermu 2011-02-28 12:45:01

+0

謝謝,我會檢查。 – chardex 2011-02-28 16:53:57

回答

6

這是您的問題的工作解決方案。您必須先使用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(); 
    } 
}); 
3

查看iconv-lite庫。使用 它你的代碼可能是這樣的:

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

語言Iconv不具有windows-1251

您可以從bnoordhuis/node-iconv驗證編碼列表。

順便說一句,從維基百科:

視窗-1251和KOI8-R(或者其變體烏克蘭語KOI8-U)被更通常大於ISO 8859-5使用。

0
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); 
}); 
+0

請不要發佈裸露的代碼,也請提供解釋代碼在做什麼。 – 2016-12-02 12:38:08