Показать сообщение отдельно
  #1 (permalink)  
Старый 31.05.2021, 17:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Перекодировать данные из MongoDB в файл csv
Хочу перекодировать данные из MongoDB (utf-8) в файл csv (windows-1251)...
Нашел два примера с использованием encoding и iconv-lite.
Но какие бы комбинации на пробовал - файл получается с "кракозябрами".

Может подскажите как получить файл в нужной (win) кодировке?

const mongojs = require('mongojs')
const fs = require("fs");
const tunnel = require('tunnel-ssh');
const encoding = require('encoding')
const iconv = require("iconv-lite")

const cnf = JSON.parse(fs.readFileSync('./config.json'))
const config = {
	host: cnf.host,
	port: cnf.port,
	username: cnf.username,
	agent : process.env.SSH_AUTH_SOCK,
	privateKey: fs.readFileSync(cnf.keyFile),
	dstPort: cnf.dstPort
};

const server = tunnel(config, function (error, server) {
	if (error) return console.log("SSH не подключился", error)

	const db = mongojs('test') 
	const cl = db.collection('product')
	
	//const file = fs.createWriteStream('product.csv', 'ascii')
	const file = fs.createWriteStream('product.csv', 'utf-8')
	file.on('error', err => {
		console.log('Ошибка записи файла', err)
	})
	
	const q = {}
	const fld = {
		title: 1
	}

	const cur = cl.find(q, fld).sort({title: 1})
	cur.on('data', (doc) => {
		//const val = iconv.decode(doc.title, "win1251")
		//const val = encoding.convert(doc.title, 'WINDOWS-1251', 'UTF-8')
		//file.write(val + ';\n')
		file.write(doc.title + ';\n')
	})
	cur.on('error', err => {
		end()
		console.log('Ошибка чтения данных', err)
	})
	cur.on('end', () => {
		end()
		console.log('Все')
	})
	const end = () => {
		db.close()
		file.end()
	}
});
Ответить с цитированием