Excel导出的UTF-8希伯来语CSV用PapaParse/csv-parser解析乱码如何解决
问题原因
- Excel导出的UTF-8格式CSV默认携带*UTF-8 BOM(字节顺序标记)*头部标识,多数CSV解析库默认按无BOM的UTF-8规则解析,会出现字符识别错误,输出
?乱码 - 部分版本Excel的「CSV-UTF-8」导出选项实际输出编码为希伯来语专属编码
Windows-1255,并非标准UTF-8,也会导致解析乱码
修复方案
1. 前端PapaParse修复
在配置中显式指定编码,PapaParse会自动处理BOM标记,修改后代码如下:
papa.parse(file, { worker: true, encoding: "utf-8", // 显式指定UTF-8编码 step: function (result) { count++; console.log(result.data[0]) }, complete: function (results, file) { console.log('parsing complete read', count, 'records.'); } });
如果修改后仍有乱码,可尝试将编码改为Windows-1255,验证是否为导出时编码选择错误。
2. Node.js csv-parser修复
首先需要在读取文件时显式指定编码,原代码中对对象数组调用toString('utf-8')属于语法错误,修改后代码如下:
const csv = require('csv-parser'); const fs = require('fs'); const results = []; // 读取流显式指定UTF-8编码 fs.createReadStream('Cities.csv', { encoding: 'utf8' }) .pipe(csv()) .on('data', function (datarow) { results.push(datarow); }) .on('end', function () { console.log(results); });
如果验证是Windows-1255编码,可借助iconv-lite库转码后解析:
const csv = require('csv-parser'); const fs = require('fs'); const iconv = require('iconv-lite'); const results = []; fs.createReadStream('Cities.csv') .pipe(iconv.decodeStream('win1255')) // 解码Windows-1255编码 .pipe(iconv.encodeStream('utf8')) // 转换为标准UTF-8 .pipe(csv()) .on('data', function (datarow) { results.push(datarow); }) .on('end', function () { console.log(results); });
内容的提问来源于stack exchange,提问作者Ben Cohen
相关产品推荐
相关产品推荐

