【csv-parse】使用parse方法的时候来转换为csv字符串时,会导致输出有乱码

在这里插入图片描述

😁 作者简介:一名大四的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:前端bug记录
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

这是在使用框架csv-parse的时候,出现的一些字符转换问题的记录,希望可以帮助到大家,欢迎大家的补充和纠正

csv-parse框架

1、使用parse方法的时候来转换为csv字符串时,会导致输出的对象第一个属性会有乱码

问题复现:

问题概念:id字段中会有一个乱码,无法通过record["id"]来获取该属性的属性值
问题代码:

const input = fs.readFileSync(csvFilePath, { encoding: 'utf8' })
console.log(typeof input)

//设置bom为ture的原因是因为csv文件的慢一些数据开头会有bom通,导致第一列数据是乱码的
const records=parse(input,{delimiter: ',',skip_empty_lines:true,columns:true,trim:true})
console.log(records)

问题结果:
image.png

解决问题

原因:是因为某些字段中有BOM头的存在,导致转换为utf-8编码格式d读取文件信息出现乱码

🤖:BOM(Byte Order Mark)头是指在某些Unicode编码格式的文件中,特别是在UTF-8、UTF-16和UTF-32中,用于标识文件编码类型的特殊字符序列。BOM字符不是一个实际的可打印字符,而是由特定的字节序列组成,这些字节序列的存在表明文件是用Unicode编码的,并且可以指示字节顺序(对于那些使用字节顺序的编码,如UTF-16和UTF-32)。
在UTF-8中,BOM头由字节序列 \xEF\xBB\xBF 组成,虽然它不是必须的,因为UTF-8的字节顺序是固定的,但有时会被添加到文件的开头以标识文件的编码。然而,一些程序(如某些文本编辑器和编程语言)可能无法正确处理带有UTF-8 BOM头的文件,尤其是在预期没有BOM的情况下。
在UTF-16和UTF-32中,BOM头用于确定字节顺序,因为这些编码方式中字节的顺序可以有两种:小端序(little-endian)和大端序(big-endian)。例如,UTF-16的小端序BOM是\xFF\xFE,大端序BOM是\xFE\xFF。
需要注意的是,虽然BOM在某些情况下有助于识别文件编码,但它也可以引起问题,尤其是当软件不期望或不支持BOM时。在某些编程场景下,为了避免兼容性问题,通常建议不使用BOM。

解决的方法:
使用csv框架的bom选项来处理

//设置bom为ture的原因是因为csv文件的慢一些数据开头会有bom通,导致第一列数据是乱码的
const records=parse(input,{bom:true,delimiter: ',',skip_empty_lines:true,columns:true,trim:true})

输出:
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值