赞
踩
相信在做IT开发的人都碰到过,中文乱码的问题。特别是做数据的工程是,经常有用sql查出一批数据后,要导成CSV文件时,发现导出的信息中,中文都是乱码;便会在网上各种查询处理方案,然后会搜索到一大堆没有治标不治本的方法。
碰到这种乱码情况怎么办呢?其实只需要在导出时设置一个参数勾选即可(插入BOM)。
导出步骤:
第一步:
第二步:
第三步:导出时选择编码 UTF-8,并且勾选"插入BOM",然后下一步完成即可。
解释CSV读取数据的原理,以便于碰到csv打开乱码的其他问题。
原理:
Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取。这个bom是微软自己定义的一种文件头部协定,存储内容就是标识文件编码的信息,这个BOM 头在被其他的表格展示器(比如 Numbers 或者 Libre Office)打开的时候会被忽略,但对 Excel 就不一样了。我们在生成csv的平台不一定遵循微软的bom协议,导致如果输出非unicode编码的csv文件(例如utf-8),并且没有生成bom信息的话,Excel自动按照unicode编码读取,就会出现乱码问题了。所以只需将非unicode编码的csv文件,用文本编辑器(推荐notepad++)打开并转换为带bom的编码形式(具体编码方式随意),问题解决,变不会乱码。
开发代码层面生成CSV文件,注意设置如下参数:
- //代码层面生成csv文件的地方加上如下所示
-
- // 产生 CSV 的过程,body: string[][], header: string[]
- const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);
- const BOM = Buffer.from('\uFEFF');
- // 设置BOM头
- const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);
- return bomCsv.toString();
该文仅为做一个笔记,供自己查阅,请大神勿喷,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。