shell脚本生成csv文件,但是解压乱码解决方案

问题描述:使用sqluldr2linux64.bin生成csv文件以后上传到页面展示,但是在页面上下载的时候不管是文件名还是文件内容都是中文乱码。PS:页面上传的时候默认字符集是UTF-8。

初步分析是字符集的问题,我检查了sqluldr2linux64.bin中的配置参数:charset=utf8,这个和页面接收文件默认字符集是完全一致的,理论上字符集不同才会导致中文乱码,我当时是百思不得其解。后来查阅了一下资料,才找到问题的关键,生成的csv文件,默认字符集就是GB2312,也就是说在生成csv的文件时设置的字符集参数charset和文件csv的格式已经不一样了。导致了中文乱码(这里提一句,这种情况在用office打开的时候是乱码,但是用WPS打开都是正常中文)。

接下来我把sqluldr2linux64.bin中的配置参数改成charset=zhs16gbk,然后重新生成csv文件,然而新的问题出现了,提示字符集参数无效(没来得及把问题截图=_=)。但是其他类似的脚本也用过配置过这个参数,所以配置这个字符集肯定是没有问题的,我又重新分析了一下sqluldr2linux64.bin的配置参数,对比另外字符集为charset=zhs16gbk的脚本找到了问题,query里面的sql语句存在中文,把中文替换成英文以后成功生成了csv,上传以后内容为正常中文。

但是(这个词经常出现在我此次的经历中),用中文命名的csv还是中文乱码,这个问题比较好解释,因为sqluldr2linux64.bin中的配置参数:charset=zhs16gbk,而页面上传默认字符集是utf8,页面字符集是无法更改的。这个时候只要再上传之前把文件的字符集改成utf8就可以了,如下图所示。

#将生成的csv文件压缩,节省上传时间
gzip *.csv
#将压缩的文件从GBK更改为UTF-8
convmv -f GBK -t UTF-8 --notest *.gz
sleep 600

当然本次解决这个问题的时候也有个意外的收获,我找到一个临时解决内容正常中文但是文件名中文乱码的方法,供大家参考。下载2345好压,找到下图所示的“更多代码页与设置”==>“UTF-8”,这样解压以后文件名就是正常中文,当然这个方法治标不治本,仅作一种参考方法。

shell脚本生成csv文件,但是解压乱码解决方案

shell脚本生成csv文件,但是解压乱码解决方案