Проблемы с кодировкой на node.js
Добрый день.
Делаю парсер сайтов на node js и вот уже второй день не получается разобраться с кодировкой (страница имеет кодировку windows-1251), пробовал несколько модуле для изменения кодировки (iconv-lite/encoding) не помогает, на выходе получаю непонятные символы. Может кто еще сталкивался с подобной проблемой ? |
Цитата:
|
body = iconv.encode(body, "win1251");
|
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); }) }); |
Большое спасибо за помощь, все работает.
|
Добрый день! Попытался использовать пример выше, но не получилось для моей задачи. А задача в следующем - есть JSON файл внутри русские буквы в перемешку с английскими. Файл c кодировкой cp1251(windows-1251). Этот файл нужно перевести в UTF-8. Попробовал использовать "iconv-lite", но все приводило к крякозябрам такого вида "пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ їЅ пїЅ-7-2" или просто "����"
Вот кусок JSON: "TEST": { "CODE": 1, "NAME": "����", }, Читаю файл через FS |
Часовой пояс GMT +3, время: 17:28. |