iconv-lite не все правильно декодирует, хотя я использую правильное декодирование - PullRequest
0 голосов
/ 22 октября 2018

Я использую этот фрагмент кода для загрузки веб-страницы (используя библиотеку 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, но это не помогло.

1 Ответ

0 голосов
/ 29 октября 2018

Я использовал этот сайт: https://validator.w3.org/nu/?doc=https%3A%2F%2Fapod.nasa.gov%2Fapod%2Fap170813.html, чтобы проверить, действительно ли на странице, которую я копирую, кодировка ISO-8859-1, оказалось, что она имеет кодировку Windows-1252.Я изменил кодировку в своем API (var encoding = 'windows-1252'), и теперь она работает хорошо.

...