Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2016, 13:51
Интересующийся
Отправить личное сообщение для 6at9l Посмотреть профиль Найти все сообщения от 6at9l
 
Регистрация: 25.03.2016
Сообщений: 17

Проблемы с кодировкой на node.js
Добрый день.
Делаю парсер сайтов на node js и вот уже второй день не получается разобраться с кодировкой (страница имеет кодировку windows-1251), пробовал несколько модуле для изменения кодировки (iconv-lite/encoding) не помогает, на выходе получаю непонятные символы.
Может кто еще сталкивался с подобной проблемой ?
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2016, 14:09
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
пробовал несколько модуле для изменения кодировки (iconv-lite/encoding) не помогает, на выходе получаю непонятные символы
А как пробуешь-то? iconv-lite нормально должен переводить.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2016, 15:08
Интересующийся
Отправить личное сообщение для 6at9l Посмотреть профиль Найти все сообщения от 6at9l
 
Регистрация: 25.03.2016
Сообщений: 17

body = iconv.encode(body, "win1251");
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2016, 16:24
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

encode переводится как закодировать. Эта функция берет javascript-строку и конвертирует ее в указаную кодировку, возвращая объект Buffer - массив фиксированого размера с набором байтов.

В твоем случае надо использовать decode, причем, на вход надо подавать не строку, а именно что буфер. На низком уровне это выглядит так:
// Код рабочий, можно запустить и проверить - должен вывести коректный русский текст
const iconv = require("iconv-lite");
const http = require("http");

http.get("http://forum.heroes35.net/", (res) => {
  let chunks = [];

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

  res.on("end", (chunk) => {
    let body = iconv.decode(Buffer.concat(chunks), "win1251");
    console.log(body);
  });
});


Но лучше, конечно, использовать потоковый интерфейс:
const iconv = require("iconv-lite");
const http = require("http");

http.get("http://forum.heroes35.net/", (res) => {
  res.pipe(iconv.decodeStream("win1251")).collect((err, body) => {
    if (err) throw err;
    console.log(body);
  })
});

Последний раз редактировалось Erolast, 03.08.2016 в 16:26.
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2016, 10:15
Интересующийся
Отправить личное сообщение для 6at9l Посмотреть профиль Найти все сообщения от 6at9l
 
Регистрация: 25.03.2016
Сообщений: 17

Большое спасибо за помощь, все работает.
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2020, 12:16
Новичок на форуме
Отправить личное сообщение для AlexAlesh Посмотреть профиль Найти все сообщения от AlexAlesh
 
Регистрация: 19.05.2020
Сообщений: 1

Добрый день! Попытался использовать пример выше, но не получилось для моей задачи. А задача в следующем - есть JSON файл внутри русские буквы в перемешку с английскими. Файл c кодировкой cp1251(windows-1251). Этот файл нужно перевести в UTF-8. Попробовал использовать "iconv-lite", но все приводило к крякозябрам такого вида "пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ їЅ пїЅ-7-2" или просто "����"
Вот кусок JSON:
"TEST": {
    "CODE": 1,
    "NAME": "����",
  },


Читаю файл через FS
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с кодировкой... Vladislav AJAX и COMET 1 08.06.2013 22:09
Проблемы при установке модулей node.js tadjik1 AJAX и COMET 1 18.03.2012 02:20
Проблемы с кодировкой во встраиваемом скрипте fav Элементы интерфейса 2 04.04.2011 09:14
Проблемы с кодировкой в AJAX alxcube Общие вопросы Javascript 3 18.01.2011 12:09
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37