解决node.js读取.csv文件中文出现乱码问题
Posted ur home
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决node.js读取.csv文件中文出现乱码问题相关的知识,希望对你有一定的参考价值。
问题:使用nestjs,读取csv文件数据,获取到的中文是乱码
原因:数据生成时是GBK编码,nodejs原生读取文件不支持GBK
解决:使用iconv-lite库
示例:
const fs = require('fs');
// filePath为文件路径
const filePath = 'D:/demo.csv';
const stream = fs.createReadStream(filePath, encoding: 'binary' );
let data = '';
stream.on('error', err =>
console.error('读取行错误');
console.error(err);
);
stream.on('data', item =>
data += item;
);
stream.on('end', () =>
const buf = Buffer.from(data, 'binary');
// 获得正常的字符串,没有乱码
const str = iconv.decode(buf, 'GBK');
);
业务中使用:
import Injectable from '@nestjs/common';
const xlsx2json = require('node-xlsx');
const iconv = require('iconv-lite');
const fs = require('fs');
@Injectable()
export class FileService
array = [];
fileAddress = 'D:/home/file;
async csvTojson(file: any): Promise<any>
this.array = [];
try
const list = xlsx2json.parse(file.path);
// list[0]为Sheet1
const data = [...list[0].data];
const arr = [];
for (let i = 1; i < data.length; i++)
if (data[i][14] !== 0)
const type = iconv.decode(data[i][6], 'GBK').split('\\t')[0];
const param =
id: data[i][1],
type: type,
value: data[i][14],
;
arr.push(param);
this.array = arr;
const dataJson = JSON.stringify(arr);
fs.writeFileSync(`$this.fileAddress/dataJson.json`, `$dataJson`);
return
code: 200,
message: '上传成功',
;
catch (err)
return
code: 503,
msg: `Service error: $err`,
;
以上是关于解决node.js读取.csv文件中文出现乱码问题的主要内容,如果未能解决你的问题,请参考以下文章
linux下使用opencsv.jar 读取CSV文件出现中文乱码