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文件,注意设置如下参数:

//代码层面生成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();

 

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

 

 

 

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckjump

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值