Node.js модуль mikeal/request - искаженный веб-сайт non-utf8 (Shift_JIS)

Я пытаюсь получить доступ к веб-сайту не utf-8 с помощью модуля запроса. Ответ искажен для этого запроса.

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 ответ

Вы должны сделать преобразование самостоятельно. В приведенном ниже примере кода используется 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 хорошо для преобразования в строку.

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

Другие вопросы по тегам