当前位置:   article > 正文

SQL工具导出CSV文件中文乱码_sql数据查询导出结果集csv会乱码

sql数据查询导出结果集csv会乱码

DBeaver 导出CSV文件中文乱码

        相信在做IT开发的人都碰到过,中文乱码的问题。特别是做数据的工程是,经常有用sql查出一批数据后,要导成CSV文件时,发现导出的信息中,中文都是乱码;便会在网上各种查询处理方案,然后会搜索到一大堆没有治标不治本的方法。

  • 使用DBeaver导出的乱码数据

  • 真实数据确实如下

碰到这种乱码情况怎么办呢?其实只需要在导出时设置一个参数勾选即可(插入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文件,注意设置如下参数:

  1. //代码层面生成csv文件的地方加上如下所示
  2. // 产生 CSV 的过程,body: string[][], header: string[]
  3. const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);
  4. const BOM = Buffer.from('\uFEFF');
  5. // 设置BOM头
  6. const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);
  7. return bomCsv.toString();

 

该文仅为做一个笔记,供自己查阅,请大神勿喷,谢谢。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/730198
推荐阅读
相关标签
  

闽ICP备14008679号