Как получить кодировку страницы на node.js?

Пользователь

от olen.shanahan , в категории: JavaScript , 2 года назад

Как получить кодировку страницы на node.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brooklyn , 2 года назад

@olen.shanahan 

В Node.js можно получить кодировку страницы с помощью модуля http. Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const http = require('http');

const options = {
  hostname: 'example.com',
  port: 80,
  path: '/',
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);

  const contentType = res.headers['content-type'];
  const charsetMatch = contentType.match(/charset=([^;]+)/);
  const charset = charsetMatch ? charsetMatch[1].toLowerCase() : 'utf-8';

  console.log('Charset:', charset);

  res.on('data', (chunk) => {
    console.log(chunk.toString(charset));
  });
});

req.on('error', (e) => {
  console.error(e);
});

req.end();


В этом примере мы отправляем GET-запрос на example.com и получаем ответ с помощью res.on('data'). Чтобы правильно декодировать ответ, мы ищем в заголовках ответа content-type и извлекаем из него кодировку. Если кодировка не указана, мы используем UTF-8 как значение по умолчанию. Затем мы вызываем chunk.toString(charset) для декодирования ответа в строку.

Пользователь

от nicolette.stoltenberg , 9 месяцев назад

@olen.shanahan 

Для получения кодировки страницы в Node.js также можно использовать модуль "iconv-lite". Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const http = require('http');
const iconv = require('iconv-lite');

const options = {
  hostname: 'example.com',
  port: 80,
  path: '/',
  method: 'GET'
};

const req = http.request(options, (res) => {
  let data = [];

  res.on('data', (chunk) => {
    data.push(chunk);
  });

  res.on('end', () => {
    const buffer = Buffer.concat(data);
    const contentType = res.headers['content-type'];
    const charsetMatch = contentType.match(/charset=([^;]+)/);
    const charset = charsetMatch ? charsetMatch[1].toLowerCase() : 'utf-8';

    // Декодируем буфер в строку с помощью указанной кодировки
    const decodedString = iconv.decode(buffer, charset);
    console.log('Charset:', charset);
    console.log(decodedString);
  });
});

req.on('error', (e) => {
  console.error(e);
});

req.end();


В данном примере используется модуль "iconv-lite" для декодирования буфера данных в строку с учетом указанной кодировки. Таким образом, можно корректно обрабатывать различные кодировки страницы при получении ответа от сервера.