Linux下如何将UTF8编码批量转换成GB2312编码

2016-02-20 03:15 28 1 收藏

下面是个超简单的Linux下如何将UTF8编码批量转换成GB2312编码教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - Linux教程 】

UTF8编码和GB2312编码是有区别的,在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,可是一个个的转换十分麻烦,下面图老师小编就教你如何在Linux下将UTF8编码批量转换成GB2312编码。

 Linux下如何将UTF8编码批量转换成GB2312编码

背景

本人在使用oracle的sqlplus批量导入UTF8编码的sql脚本时,由于不了解如何设置让sqlplus识别UTF8格式,导致出现乱码、错行等错误,而使工作无法继续,在google无果的情况下只好想办法转换编码。

由于文件较多,手动转换太麻烦,于是想到用脚本批量转换,幸好网上相关脚本比较多,实现起来唯一的麻烦是UTF8的BOM标记。

内容:

代码如下:

#!/bin/bash

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

for loop in `find 。 -type f -name *.sql -print`do

echo $loop

mv -f $loop $loop.tmp

dos2unix $loop.tmp

file_check_utf8=‘file_check_utf8.log’

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

sed -n ‘1l’ $loop.tmp 》$file_check_utf810. if grep ‘^357273277’ $file_check_utf8 》/dev/null 2》&111. then

echo ‘UTF-8 BOM’

sed -n -e ‘1s/^.。。//’ -e ‘w intermediate.txt’ $loop.tmp14. iconv -f UTF-8 -t GB2312 -o $loop intermediate.txt15. rm -rf intermediate.txt

rm -rf $loop.tmp

elif iconv -f UTF-8 -t GB2312 $loop.tmp 》/dev/null 2》&118. then

echo ‘UTF-8’

iconv -f UTF-8 -t GB2312 -o $loop $loop.tmp21. rm -rf $loop.tmp

else

echo ‘ANSI’

mv -f $loop.tmp $loop

fi

rm -rf $file_check_utf8

#模拟unix2dos,要求文本文件最后一行必须有换行符28. sed -n -e ‘s/$/r/g’ -e ‘w ’$loop.tmp $loop29. mv -f $loop.tmp $loop

done

#!/bin/bash

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

for loop in `find 。 -type f -name *.sql -print`do

echo $loop

mv -f $loop $loop.tmp

dos2unix $loop.tmp

file_check_utf8=‘file_check_utf8.log’

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

sed -n ‘1l’ $loop.tmp 》$file_check_utf810. if grep ‘^357273277’ $file_check_utf8 》/dev/null 2》&111. then

echo ‘UTF-8 BOM’

sed -n -e ‘1s/^.。。//’ -e ‘w intermediate.txt’ $loop.tmp14. iconv -f UTF-8 -t GB2312 -o $loop intermediate.txt15. rm -rf intermediate.txt

rm -rf $loop.tmp

elif iconv -f UTF-8 -t GB2312 $loop.tmp 》/dev/null 2》&118. then

echo ‘UTF-8’

iconv -f UTF-8 -t GB2312 -o $loop $loop.tmp21. rm -rf $loop.tmp

else

echo ‘ANSI’

mv -f $loop.tmp $loop

fi

rm -rf $file_check_utf8

#模拟unix2dos,要求文本文件最后一行必须有换行符28. sed -n -e ‘s/$/r/g’ -e ‘w ’$loop.tmp $loop29. mv -f $loop.tmp $loop

done

解释

1.处理UTF8的BOM,本人没有找到好的办法,最后用sed+grep判断了一下,如果前三个字节是357273277,则文件必定是UTF8,用sed去掉这三个字节再转换

2.为了避免重复或者遗漏,脚本中用iconv对没有BOM的文件尝试转换了一把,转换成功说明文件是UTF8,否则说明是ANSI也就是GB2312

3.关于最后的sed命令,那是因为本人的系统上没有unix2dos命令,所以进行了模拟,目的是为了方便自己在windows下查看和编辑

以上就是Linux下将UTF8编码批量转换成GB2312编码的方法介绍了,转换后就能解决乱码等问题,可使用命令镜像批量转换,你学会了吗?

来源:http://www.tulaoshi.com/n/20160220/1635912.html

延伸阅读
标签: Web开发
汉字标准交换码共分两级。第一级为常用字,有3755字,按汉语拼音字母顺序排列,第二级为次常用字,有3008字,按部首排列。GB2312的编码范围为2121H-777EH. UNICODE 是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏, 某处内容破坏,则会引起其后汉字...
标签: Web开发
很多可能在转摘过程中失真或未经验证就被转摘,真正使用时却不行,也由此决定自己全方位试验一下,努力还是没有白费,虽然最终得出的结果是很简单的,但其过程对于一个新学AJAX的人来说,真是挺累。 欢迎您在使用过程中对新的心得一起跟帖交流,一个思想+一个思想,至少可以产生两个思想。 一、在GET发送时: 方法1:在ASP服务器端用Respo...
UTF-8与GB2312之间的互换 作者:吴康彬 相信一定有不少的程序开发人员时常会遇到字符编码的问题,而这个问题也是非常让人头痛的。因为这些都是潜在的错误,要找出这些错误也得要有这方面的开发经验才行。特别是在处理xml文档时 ,该问题的出现就更加的频繁了,有一次用java写服务器端程序,用vc写客户端与之交...
标签: Web开发
i (PCRE_CASELESS) 如果设定此修正符,模式中的字符将同时匹配大小写字母。 m(PCRE_MULTILINE) 默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D...
如何将图片转换成pdf 准备工作: 1)下载安装迅捷jpg转换成pdf转换器。 迅捷jpg转换成pdf转换器特点: 1.支持自定义转换页面范围。 2.支持批量添加jpg文件。 3.转换速度快,效果良好。 4.不依赖于Adobe Acrobat,Acrobat Reader 软件。 开始转换: 步骤1:打开迅捷jpg转换成pdf转换器,选择图...

经验教程

835

收藏

55
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部