utf8编码转换脚本
差不多去年的這個時候吧,由于項(xiàng)目組的編碼從GBK轉(zhuǎn)向UTF-8,讓我來負(fù)責(zé)轉(zhuǎn)換所有的源文件,當(dāng)時frank給了我一個轉(zhuǎn)換的腳本,可以過濾文件類型來轉(zhuǎn)換,由于是frank自己使用的工具,所以也沒怎么注意容錯,基本上可以理解成是對某些類型的文件使用iconv -f gbk -t utf-8 這樣的命令來轉(zhuǎn)換。后來發(fā)現(xiàn)悲劇了,原因是有一些文件已經(jīng)是utf-8編碼了,結(jié)果在強(qiáng)轉(zhuǎn)了一次,就亂碼了,因?yàn)橹挥袔讉€文件亂碼,所以一開始還沒注意到,直到后來發(fā)現(xiàn)的時候,又得一個一個重新轉(zhuǎn)回去,所以還是挺麻煩的。
最近在用一個公共組件的時候,發(fā)現(xiàn)其提供的都是gbk編碼的,所以想著干脆還是寫一個腳本來完成這件事情吧,這次吸取了上次的教訓(xùn),首先會用file來判斷下文件的編碼是什么編碼的(當(dāng)前只判斷gbk和utf-8),然后根據(jù)不同的類型,來設(shè)置不同的轉(zhuǎn)換選項(xiàng)。默認(rèn)只轉(zhuǎn)換當(dāng)前文件夾下的所有.cpp和.h文件,當(dāng)然,路徑和文件類型,可以分別用-f和-t的參數(shù)傳進(jìn)去。當(dāng)然,如果你發(fā)現(xiàn)有什么沒有考慮到的地方,還請斧正,謝謝啦。
?
#!/bin/bashfile_type_list="cpp h" file_path="."#-f:文件名或者目錄名 -t: 文件類型 #如果不傳入?yún)?shù),默認(rèn)目錄為當(dāng)前目錄,默認(rèn)轉(zhuǎn)換文件類型為.h .cpp #example:covert_to_utf8 -f . -t "cpp h" while getopts "t:f:" arg #選項(xiàng)后面的冒號表示該選項(xiàng)需要參數(shù) docase $arg inf)echo "f's arg:$OPTARG"file_path=$OPTARG;;t)echo "t's arg:$OPTARG" file_type_list=$OPTARG;;?)echo "unkonw argument"exit 1;;esac doneecho "file_type=" $file_type_list "file_path=" $file_path #如果是普通文件或者目錄才進(jìn)行查找、轉(zhuǎn)換,其他情況,不轉(zhuǎn)換 if [ -f $file_path -o -d $file_path ]; thenecho "Begin to Convert $file_path from GBK to UTF-8...." elseecho " $file isn't a file or directory,can't convert! "exit; fi#找到普通文件,然后轉(zhuǎn)換這些文件 all_file=`find $file_path -type f`;for file in $all_file; dofile_type=${file##*.} #echo $file $file_type;if [[ "$file_type_list" != *"$file_type"* ]];thenecho "$file_type not in $file_type_list"continue;fifile_encoding=`file $file | awk -F : '{print $2}' | awk '{print $1}'`#GBKif [ $file_encoding == "ISO-8859" ];thenoriginal_encoding="gbk"#ASCII or UTF-8elif [ $file_encoding == "ASCII" -o $file_encoding == "UTF-8" ];thenecho "$file encoding $file_encoding is ok, not need convert"continue;#未定義的編碼elseecho "$file error encoding $file_encoding, can't convert"continue;fiiconv -f $original_encoding -t utf-8 $file > $file"_tmp"#判斷是否轉(zhuǎn)換成功if [ $? != 0 ];thenecho "covert $file failed!"continue;fimv $file"_tmp" $fileecho "convrt $file success!" doneecho "All file convert done!"轉(zhuǎn)載于:https://www.cnblogs.com/huangwei/archive/2012/09/19/2692421.html
總結(jié)
以上是生活随笔為你收集整理的utf8编码转换脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android call requir
- 下一篇: win7 iis7 配置如何让局域网内其