English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Решение проблемы кириллической кляксы при получении html в ответе http в Node.js

Сегодня при выполнении HTTP-запроса с помощью nodejs возвращенные данные представляют собой файл html, затем я все еще использую метод парсинга JSON-данных, который использовал раньше. Как и ожидалось,出现了错误: SyntaxError: Unexpected token  in JSON at position 0

Невозможно, остается только изменить метод, преобразовав полученный объект Buffer в строку toString, затем обнаружилось, что вывод является乱码.

Впервые я подумал, что это проблема кодировки, поэтому я googled и посмотрел официальную документацию, и总结了 три метода:

1. Используйте toString с форматом кодировки в качестве параметра.

2. Используйте iconv-lite для изменения кодировки.

3. Используйте cheerio для загрузки html.

Но ни один из трех методов не был моей ошибкой, затем я увидел, что в cnode кто-то имеет похожую проблему, хотя и не такую же, но среди ответов кто-то упомянул использование gzip сжатия, и после того, как я проверил заголовки моего запроса, я действительно нашел gzip сжатие = = manual facepalm.

Зная причину проблемы, решение становится很简单.

Сначала давайте выполним npm install zlib;

Затем включите var zlib = require('zlib'); в заголовке.

Затем查阅官方 документацию, и выяснилось, что есть два способа разархивации, один - это синхронный, а другой - асинхронный.

Я здесь использую асинхронный способ.

zlib.unzip(chunk, function(error, res) {
  console.log(error);
  console.log(res+"\n");
});

Этот chunk - это наш полученный buffer объект, важно отметить, что у этого асинхронного callback есть два параметра, первый - это информация об ошибке, а второй - это所需要的 html строка.

Если нужно использовать синхронный, пожалуйста, вызовите zlib.unzipSync(buffer); ps: ошибка, которую я получил при тестировании, была unexpected end of file

Теперь моя проблема была решена完美。

Вот и все, что я хочу предложить вам по решению проблемы кракозябр в html, получаемом при использовании http-запросов в nodejs. Надеюсь, это будет полезно, и希望大家多多支持呐喊 учебник.

Вам может понравиться