国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux系統下批量轉換UTF8到GB2312并處理UTF8的BOM標記

2020-07-10 11:38:39
字體:
來源:轉載
供稿:網友

  背景

  本人在使用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/$//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標記 的方法,謝謝閱讀,希望能幫到大家,請繼續關注武林網,我們會努力分享更多優秀的文章。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霞浦县| 河间市| 垦利县| 青铜峡市| 泾阳县| 固阳县| 克什克腾旗| 海口市| 桐柏县| 克东县| 丹凤县| 横峰县| 广河县| 米易县| 陇西县| 奉新县| 贡觉县| 天津市| 淮北市| 东兰县| 武冈市| 德昌县| 宝鸡市| 江永县| 南华县| 马龙县| 南川市| 东平县| 绥中县| 柯坪县| 资源县| 洛宁县| 浑源县| 游戏| 随州市| 南阳市| 延寿县| 扎兰屯市| 南平市| 江山市| 沛县|