Я использую этот фрагмент кода для загрузки веб-страницы (используя библиотеку request
) и декодирования всего (используя библиотеку iconv-lite
).Функция loader
предназначена для поиска некоторых элементов в теле веб-сайта и их возврата в виде объекта JavaScript.
request.get({url: url, encoding: null}, function(error, response, body) {
// if webpage exists, process it, otherwise throw 'not found' error
if (response.statusCode === 200) {
body = iconv.decode(body, "iso-8859-1");
const $ = cheerio.load(body);
async function show() {
var data = await loader.getDay($, date, html_tags, thumbs, res, image_thumbnail_size);
res.send(JSON.stringify(data));
}
show();
} else {
res.status(404);
res.send(JSON.stringify({"error":"No content for this date."}))
}
});
Страницы кодируются в формате ISO-8859-1, а содержимоевыглядит нормально, плохих персонажей нет.Когда я не использовал iconv-lite
, некоторые символы, например.ü
выглядели так: �.Теперь, когда я использую библиотеку, как в приведенном выше коде, большинство символов выглядят хорошо, но некоторые, например.š
- пустое поле, даже если они отображаются без проблем на веб-сайте.
Я уверен, что это не проблема cheerio, потому что когда я печатал вывод, используя res.send(body);
или res.send(JSON.stringify({"body":body}));
, символ пустого поля все еще присутствовал там.Может быть, это проблема с Express?Есть ли способ исправить это?
РЕДАКТИРОВАТЬ: я скопировал символ пустой коробки в Google, и он изменился на š
, может быть, это важно
Также я попытался изменить выводЭкспресс с использованием res.charset
, но это не помогло.