作者:心痛则痛1314 | 来源:互联网 | 2023-09-06 20:32
一、dbeaver导出数据表到csv后数据乱码按如下方式导出即可勾选插入BOM即可Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认
一、dbeaver导出数据表到csv后数据乱码
按如下方式导出即可
![](https://img2.php1.cn/3cdc5/3beb/696/43f87aae3ef9066f.png)
![](https://img2.php1.cn/3cdc5/3beb/696/dc8b853dacd5c1f8.png)
![](https://img2.php1.cn/3cdc5/3beb/696/834596135791f9d0.png)
勾选插入BOM即可
![](https://img2.php1.cn/3cdc5/3beb/696/263ba5cfe18a7cb6.png)
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();
原文链接:https://www.daimajiaoliu.com/daima/711d9ef2230f008