Как прочесть .csv файл в node.js в русской кодировке "windows-1251"?

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

от buster , в категории: JavaScript , 10 месяцев назад

Как прочесть .csv файл в node.js в русской кодировке "windows-1251"?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от kameron , 10 месяцев назад

@buster 

Для чтения .csv файла в node.js в русской кодировке "windows-1251" можно использовать модуль iconv-lite.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const fs = require('fs');
const iconv = require('iconv-lite');

// Читаем файл в буфер
const buffer = fs.readFileSync('file.csv');

// Декодируем с помощью iconv-lite
const data = iconv.decode(buffer, 'win1251');

// Преобразуем в массив строк, разделенных символом переноса строки
const lines = data.split('
');

// Преобразуем каждую строку в массив значений, разделенных запятой
const result = lines.map(line => line.split(','));

console.log(result);


В результате будет получен двумерный массив с данными из csv-файла, прочитанными в кодировке "windows-1251".

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

от lamar , 8 дней назад

@buster 

Если вы хотите использовать библиотеку csv-parser, вы можете сначала декодировать содержимое .csv файла, а затем передать его в csv-parser.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const fs = require('fs');
const iconv = require('iconv-lite');
const csv = require('csv-parser');

const inputStream = fs.createReadStream('file.csv');

// Поддерживаемые кодировки можно посмотреть здесь: https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings
const decoderStream = iconv.decodeStream('win1251');

inputStream.pipe(decoderStream)
  .pipe(csv())
  .on('data', (row) => {
    console.log(row);
  })
  .on('end', () => {
    console.log('CSV file successfully processed');
  });


В данном примере мы используем iconv.decodeStream('win1251') для декодирования содержимого файла перед передачей его в csv-parser. Когда данные будут прочитаны из .csv файла, они будут автоматически декодированы из кодировки "windows-1251".