日期:2014-05-16 浏览次数:20685 次
本人在使用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_utf8 if grep '^\\357\\273\\277' $file_check_utf8 >/dev/null 2>&1 then echo 'UTF-8 BOM' sed -n -e '1s/^...//' -e 'w intermediate.txt' $loop.tmp iconv -f UTF-8 -t GB2312 -o $loop intermediate.txt rm -rf intermediate.txt rm -rf $loop.tmp elif iconv -f UTF-8 -t GB2312 $loop.tmp >/dev/null 2>&1 then echo 'UTF-8' iconv -f UTF-8 -t GB2312 -o $loop $loop.tmp rm -rf $loop.tmp else echo 'ANSI' mv -f $loop.tmp $loop fi rm -rf $file_check_utf8 #模拟unix2dos,要求文本文件最后一行必须有换行符 sed -n -e 's/$/\r/g' -e 'w '$loop.tmp $loop mv -f $loop.tmp $loop done