Не отображаются символы текста, которые были получены с помощью скрапинга с cheerio (Node JS)

Все так, как и в заголовке написано. Выходят какие то кракозябры типо '�'. Как исправить?

введите сюда описание изображения

    app.get('/rplTopScores', (req, res) => {
        res.send(rplTopScores);
    });

await axios('https://www.sport-express.ru/football/L/russia/premier/2022-2023/statistics/bombardiers/') // rplTopScores
    .then(response => response.data)
    .then(response => {
        const $ = cheerio.load(response);

        $('table.se19-table-statistics tr').each((i, element) => {
            rplTopScores.push({
                player: $(element).find('.se19-table-statistics__td--name a').text()
            });
            console.log($(element).find('.se19-table-statistics__td--name a').text());
        });
        
    })
    .catch(err => console.log(err));

Ответы (1 шт):

Автор решения: nörbörnën
import * as cheerio from 'cheerio';
import iconv from 'iconv-lite';

const res = await fetch(
  'https://www.sport-express.ru/football/L/russia/premier/2022-2023/statistics/bombardiers/'
);

const charset = (res.headers.get('content-type') ?? '')
  .split(/\s*;\s*/).find(
    (/** @type {string} */ x) => x.startsWith('charset')
  )?.replace(/charset=/, '');

const buf = await res.arrayBuffer();
const html = iconv.decode(
  Buffer.from(buf),
  charset || 'windows-1251'
);

const $ = cheerio.load(html);

$('table.se19-table-statistics tr').each((i, element) => {
  const text = $(element).find('.se19-table-statistics__td--name a').text();
  console.log(text);
});
$ node 52863124.js 

Квинси Промес
Эдуард Сперцян
Кристиан Нобоа
Филипе Силва Малком
Владимир Сычевой
Тимур Сулейманов
Маркус Вендел
Николай Комличенко
Хорхе Карраскаль
Хесус Мануэль Медина
Федор Чалов
Дмитрий Полоз
...

node.js v18.7.0


c axios подобное можно провернуть так:

axios.get(
  url,
  {
    responseType: 'arraybuffer',
    responseEncoding: 'binary'  
  }
)
→ Ссылка