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

一刀斩你桃花快

一刀斩你桃花快

2016-02-20 03:15

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

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

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

背景

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

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

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

内容:

代码如下:

#!/bin/bash

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’

sed -n ‘1l’ $loop.tmp 》$file_check_utf810. if grep ‘^\357\273\277’ $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

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

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

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’

sed -n ‘1l’ $loop.tmp 》$file_check_utf810. if grep ‘^\357\273\277’ $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

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

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判断了一下,如果前三个字节是\357\273\277,则文件必定是UTF8,用sed去掉这三个字节再转换

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

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

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

展开更多 50%)
分享

猜你喜欢

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

电脑入门
Linux下如何将UTF8编码批量转换成GB2312编码

将GB2312编码转换到UTF-8网页编码

Web开发
将GB2312编码转换到UTF-8网页编码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java中将数据由UTF8转换成GB2312格式

编程语言 网络编程
Java中将数据由UTF8转换成GB2312格式

在Java中将数据由UTF8转换成GB2312格式

编程语言 网络编程
在Java中将数据由UTF8转换成GB2312格式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)

Web开发
xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)

将Dreamweaver CS3默认的UTF-8编码改为GB2312

Web开发
将Dreamweaver CS3默认的UTF-8编码改为GB2312

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

电脑系统无法识别WP8手机使用U盘模式应用技巧

电脑系统无法识别WP8手机使用U盘模式应用技巧

新安装的windows8系统怎么进入安全模式

新安装的windows8系统怎么进入安全模式
下拉加载更多内容 ↓