2016-10-19 3 views
0

Когда я скачиваю содержимое страницы с помощью Node.js Request и содержание кодируется ISO-8859-2, что невозможно преобразовать до UTF-8.Node.js преобразовать строку из ISO-8859-2 в UTF-8

Я использую node-iconv для этого.

Код:

request('https://www.jakpsatweb.cz', function(err, resp, body){ 
    const title = regexToRetrieveTitle(body); 
    const iconv = new Iconv('ISO-8859-2', 'UTF-8'); 
    const buffer = iconv.convert(title); 
    console.log(buffer); 
    console.log(buffer.toString('UTF8')); 
}) 

консоли:

<Buffer 52 65 6b 6c 61 6d 61 3a 20 6a 61 6b 20 66 75 6e 67 75 6a 65 20 77 65 62 6f 76 c4 8f c5 bc cb 9d 20 72 65 6b 6c 61 6d 61> 
Reklama: jak funguje webovďż˝ reklama 

Ожидаемый результат:

Reklama: jak funguje webová reklama 

ли кто-нибудь знает, где проблема?

EDIT:

Например загрузить THIS PAGE. Я узнал ISO-8859-2 по метатегам (браузер Chrome), и мне нужно преобразовать содержимое страницы и сохранить в базу данных. Моя база данных - UTF-8, поэтому мне нужно ее закодировать.

+0

Пожалуйста, укажите ожидаемые строки ввода и вывода (а не только буфер) – duncanhall

+0

Он есть. Как вы можете видеть, есть два console.logs() Это означает, что есть буфер, а вторая строка - строка. Ожидаемая строка без буфера. – MakoBuk

+0

Какова ценность 'title'? – duncanhall

ответ

0

Проблема в запросе Node.js. По умолчанию кодировка установлена ​​в UTF8. Я должен был установить его на нуль, и теперь все работает нормально.

request({ uri: 'https://www.jakpsatweb.cz', encoding: null}, function(err, resp, body){ 
    ..... 
}) 
1

Преобразование из ISO-8859-2 в UTF-8 работало нормально. Это был вход (переменная title) с неправильным содержимым: заголовок содержит байты EF BF BD. Это означает, что заголовок уже был закодирован в кодировке UTF-8, но с U + FFFD (ЗАМЕНА ХАРАКТЕРА) в том месте, где вы ожидаете буквы (ЛАТИНСКАЯ МАЛЕНЬКАЯ ПИСЬМА A С ОСТРОМ).

Оригинальная веб-страница https://www.jakpsatweb.cz/reklama/index.html правильно закодирована в ISO-8859-2, а также имеет обязательное объявление кодировки в разделе <head>.

Поэтому проблема должна быть в программном обеспечении, которое загружает веб-страницу (NodeJS) или функцию regexToRetrieveTitle.