zoukankan      html  css  js  c++  java
  • Linux下将UTF8编码批量转换成GB2312编码的方法

    Linux下将UTF8编码批量转换成GB2312编码的方法

    在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在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

      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

      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/$/ /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

      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/$/ /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编码的方法介绍了,转换后就能解决乱码等问题,可使用命令镜像批量转换,你学会了吗?

  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/timssd/p/5065374.html
Copyright © 2011-2022 走看看