2014-09-02 7 views
5

Я пытаюсь получить доступ к веб-сайту un utf-8 с помощью модуля запроса. Ответ на этот запрос искажен.Node.js mikeal/request module - Garbled non-utf8 website (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. 
    } 
}); 

Даже после установки опции кодирования Shift_JIS я вижу искаженный японский текст.

+1

https://github.com/ashtuchkin/iconv-lite Я думаю, что вы можете использовать это, чтобы декодировать SHIFT_JIS буфера в строку UTF-8. – Jerry

+0

нашел другое для узла здесь. Я собираюсь попытаться превратить его в пакет Meteor. https://github.com/polygonplanet/encoding.js –

+0

, который хорошо выглядит тоже @Jerry –

ответ

4

Вам необходимо сделать преобразование самостоятельно. В приведенном ниже примере кода используется 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. Параметр encoding: null просит request не преобразовать Buffer (массив байтов) в String пока.
  2. Мы передаем этот буфер Iconv для преобразования в другой код Buffer кодировки UTF-8.
  3. Теперь этот Buffer хорош для преобразования в строку.

(BTW, http://www.alc.co.jp перешел на UTF-8, так что я заменен на другой сайт.)

+0

Спасибо Алан! Это должно помочь некоторым людям. Ура! –