2016年3月21日 星期一

常見繁簡文互換或中文編碼問題

編碼轉換(不轉換繁、簡文)
  • 改變將路徑下的目錄與檔案名稱的編碼方式
*  需安裝 convmv
* 先測試看看:從 big5 編碼轉成 utf8
convmv -f big5 -t utf8 -r --nosmart folder_name
* 強制轉換
convmv -f big5 -t utf8 -r --nosmart --notest folder_name

繁、簡體轉換
  • 轉換檔案內容:利用 iconv 進行繁、簡互轉
* 先考慮簡單的情況:
將 gb2312 編碼的簡體轉為 big5 編碼的繁體
iconv sc-gb2312.txt -f gb2312 -t big5 -o output.txt
若需要再把編碼轉為 utf8 則再換一次
iconv sc-gb2312.txt -f gb2312 -t big5 | iconv -f big5 -t utf8   -o output.txt
big5 繁體中文要轉成 utf8 編碼的繁體中文
cat tc-big5.txt | iconv -f big5 -t utf8 > output.txt
但比較麻煩的不知道編碼的格式為何。如此,可以用 autob5, autogb (需要安裝 zh-autoconvert ) 來協助,需要再轉換 utf8 編碼再 pipe 給 iconv 做,如下:
cat sc-unknow.txt | autob5 | iconv -f big5 -t utf8 >  output.txt
反之亦然,如:
cat tc-big5.txt | autogb | iconv -f gbk -t utf8 > output.txt

* 複雜的情況:
文件內容為 utf8 編碼之簡體,要轉換成 utf8 繁體,則需要中介編碼,如下
cat sc-utf8.txt | iconv -f utf8 -t gb2312  | iconv -f gb2312 -t big5 | iconv -f big5 -t utf8 output.txt

下面則是轉換都是 utf8 的方式繁、簡檔名
  • utf8簡體檔名轉成utf8繁體檔名
* 需安裝 zh-autoconvert
* 先轉換目錄名稱
for i in $(find . -type d)  ;  do mv $i $(echo $i | autob5 --input utf8 | iconv -f big5 -t utf8) ; done
* 再轉換檔案名稱
for i in $(find . -type f)  ;  do mv $i $(echo $i | autob5 --input utf8 | iconv -f big5 -t utf8) ; done