Linux上用shell批量把文件的编码从gb2312转到utf8

7 篇文章 0 订阅

背景:项目中用vba写的SQL脚本生成工具,生成的SQL里面含有汉字,文件编码全是GB2312。上传到linux服务器上,orcale的字符集设置是utf8,用sqlplus执行的时候,日志中的汉字乱码,SQL中汉字更新到DB中也是乱码,发现需要把文件转成utf8。改VBA工具来不及了,只好借助shell了。

思路:正好有一些需要批量替换的schema之类的,一起用Shell实现了。Linux中可以用iconv来实现文件转码,试了一下,服务器(centos6.9)上正好安装了。就基于iconv来实现了。想这是先把文件列表列出来,再通过文件列表每个文件进行转换。由于iconv命令参数比较多,而且是输出到标准输出的,只能每个文件单独执行。选择把列表直接转成shell文件,来执行。

实现:

#!/bin/sh
#把文件夹名字改一下
mv sql sql_owner
#复制出一份SQL作为备份
cp sql_owner sql_utf8 -Rf
#生成所有文件列表
ls sql_owner/exp/*.sql -1 > sqllist
#复制一份文件列表
cp sqllist sqlutf8
#替换复制后的文件名路径
sed -i "s/sql_owner/ > sql_utf8/g" sqlutf8
#把原文件名的路径替换成 iconv的命令及参数
sed -i "s/sql_owner/iconv -f gb2312 -t utf8 sql_owner/g" sqllist
#把两个文件按行合并到一起,用tab分开,输出到u.sh文件中
paste sqllist sqlutf8 > u.sh
#给u.sh加执行权限
chmod 777 u.sh
#执行u.sh
./u.sh
#删除中间文件
rm u.sh sqlutf8 sqllist
#删除备份的文件
rm sql_owner -Rf 
#把转换成utf8的文件所在文件夹改会sql
mv sql_utf8 sql

经验:

1,在linux上查看文件编码。可以使用file命令,会输出文件编码。 vim 中可以在命令模式下输入 set fileencoding,显示文件编码。

2,centos下,vim显示utf8以外的编码的文件会乱码。可以通过编辑 ~/.vimrc ,追加可识别的文件编码。

  例如:set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

  这样vim就能识别GBK编码的文件了。

3,vim打开文件直接用:set fileencoding=utf-8也可以直接把文件转成utf-8。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gavin__Zhang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值