温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记

发布时间:2021-09-27 17:48:13 来源:亿速云 阅读:166 作者:iii 栏目:系统运维

这篇文章主要介绍“如何实现linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记”,在日常操作中,相信很多人在如何实现linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现linux系统下批量转换UTF8到GB2312并处理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/$/\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
      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并处理UTF8的BOM标记”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI