😁 作者简介:一名大四的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:前端bug记录
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气
🔥前言:
这是在使用框架csv-parse的时候,出现的一些字符转换问题的记录,希望可以帮助到大家,欢迎大家的补充和纠正
文章目录
- csv-parse框架
- 1、使用parse方法的时候来转换为csv字符串时,会导致输出的对象第一个属性会有乱码
- 问题复现:
- 解决问题
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)
问题结果:
解决问题
原因:是因为某些字段中有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})
输出: