星期一, 9月 10, 2007

編碼轉換工具 iconv, convmv, locale... Notes

編碼轉換工具 iconv, convmv, locale... Notes

* Overview

    * locale .. 顯示與編碼有關的環境變數設置
    * iconv ... 轉換檔案內容的編碼
    * convmv .. 轉換檔案名稱的編碼


* locale -- 顯示與編碼有關的環境變數設置

    # 範例:顯示可以設置的編碼
    shell# locale
    shell# locale -m
    shell# locale -a | grep zh_TW


* iconv -- 轉換檔案內容的編碼

    # 範例:將 gbk 轉成 big5
    shell# iconv -f cp936 -t cp950 [filename]

    # 常用參數
    -l      顯示支援的編碼
    -c      碰到無法轉換的字會自動跳過,不顯示錯誤訊息
    -s      安靜模式 (silent)


* convmv -- 轉換檔案名稱的編碼

    * convmv 是使用 perl 寫成
    * 為了避免失誤,在未加上 --notest 參數時是測試模式,不會真正轉換檔名
    * 常見微軟中文編碼為 cp950(big5), cp936(gbk)
    * 轉檔功能還是不如 convertz 好用
    * 可以轉換 %xx%xx 之類的 unicode 編碼 (convertz 無法轉)

    # 範例:將 gbk 轉成 big5
    shell# convmv -f cp936 -t cp950 [filename] // gb to big5
    shell# convmv -f cp936 -t cp950 --notest [filename]
    shell# convmv -unescape [filename] // 轉換 %xx%xx 類型的 unicode 編碼

    # 基本參數
    -f [fliename]   (from) 來源編碼
    -t [filename]   (to) 目的編碼
    -r              (recursively) 轉換包含所有子目錄的檔案
    -i              (interactiv) 互動式操作,會逐檔詢問

    # 常用參數
    --list          列出所有支援的編碼
    --unescape     可以移除掉像 %20 的 % Hex Sequences
    --notest       直接重新命名
    --nosmart      強制轉換,不偵測檔名本身是否已經是目的編碼
    --exec [cmd]    另外執行 [cmd] 指令
    --replace       如果目的檔名已經存在,將會覆寫目的檔

沒有留言: