Node.js Анализатор Cheerio прерывает кодировку UTF-8
Я просматриваю свой запрос с Cheerio следующим образом:
var url = http://shop.nag.ru/catalog/16939.IP-videonablyudenie-OMNY/16944.IP-kamery-OMNY-c-vario-obektivom/16704.OMNY-1000-PRO;
request.get(url, function (err, response, body) {
console.log(body);
$ = cheerio.load(body);
console.log($(".description").html());
});
И в качестве вывода я вижу содержимое, но в нечитаемой странной кодировке:
//Plain body console.log(body) (p.s. russian chars):
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1><p style
// cheerio console.log $(".description").html()
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY
Целевая ссылка URL-адреса в формате UTF-8. Итак, почему Cheerio нарушает мою кодировку?
Попытка использовать iconv для кодирования моего тела:
var body1 = iconv.decode(body, "utf-8");
но console.log($(".description").html());
все еще возвращает странный текст.
Ответы
Ответ 1
Cheerio ничего не сломал. Это вывод HTML-сущностей, которые будут отображаться любым браузером точно так же, как ввод HTML. Запустите этот фрагмент, чтобы увидеть, что я имею в виду:
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>
Ответ 2
Сегодня у меня возникла проблема, когда я пытался загрузить с cheerio страницу, на которой были специальные символы, такие как ç
, á
, é
и т.д.
Способ работы cheerio заключается в том, что он пытается декодировать символы по своей природе и представляет числовую кодировку HTML символа Unicode
например: вместо ç
это даст нам ç
.
Чтобы разобраться с этой проблемой, мне просто пришлось отключить эту конфигурацию, добавив: decodeEntities: false
в качестве параметра загрузки cheerio.
const $ = cheerio.load(body, { decodeEntities: false });