2014-09-02 11 views
5

Próbuję uzyskać dostęp do strony non utf-8 za pomocą modułu żądania. Odpowiedź jest zniekształcona dla tego żądania.Node.js mikeal/request module - Zakodowana strona non-utf8 (Shift_JIS)

var request = require('request'); 
request('http://www.alc.co.jp/', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    console.log(body) // Print the web page. 
    } 
}); 

Nawet po ustawieniu opcji kodowania na Shift_JIS widzę zniekształcony japoński tekst.

+1

https://github.com/ashtuchkin/iconv-lite myślę, że można to wykorzystać do dekodowania Shift_JIS bufor do ciągu UTF-8. – Jerry

+0

znalazłem inną dla węzła tutaj. Zamierzam spróbować przekształcić go w pakiet Meteorów. https://github.com/polygonplanet/encoding.js –

+0

który również wygląda dobrze @Jerry –

Odpowiedz

4

Musisz wykonać konwersję samodzielnie. Poniższy przykładowy kod używa node-iconv.

var Iconv = require('iconv').Iconv; 
    var request = require('request'); 
    request({ 
     uri: 'http://www.jalan.net/', 
     encoding: null, 
    }, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
     body = new Iconv('shift_jis', 'utf-8').convert(body).toString(); 
     console.log(body); // Print the web page. 
     } 
    }); 
  1. Parametr encoding: null zadaje request nie przekształcić Buffer (macierz bajt) jeszcze w String.
  2. Przekażemy ten bufor do Iconv, aby przekonwertować go na inny kodowanie UTF-8 w postaci Buffer.
  3. Teraz ten Buffer jest dobry do konwertowania na ciąg.

(BTW, http://www.alc.co.jp został przełączony na UTF-8, więc zastąpić innym miejscu).

+0

Dzięki Alan! To powinno pomóc niektórym ludziom. Twoje zdrowie! –