[Linux] BIG-5 與 UTF-8 檔案編碼轉換

作為一個雙棲玩家,小獅我啊,最頭痛的就是檔案編碼的問題,一份在 Windows 上製作的文件,若不小心忘記指定,多數軟體又會很 自作聰明 好心的幫我指定Big5(Windows-950)編碼,一傳到 Linux 上,就會整片的ooxx,讓我 看了也滿肚子ooxxv 不禁想問

「我知道你想要向下相容,但你可以只做相容就好嗎?」

「現在的主流是 UTF-8,而且連微軟都建議大家用 UTF-8 開發程式的,還記得嗎?」

所以,為了維護世界的和平,為了讓眾人有脫身的機會,有一個工具出現了!他叫 iconv,具有轉換世界上常見文字編碼的能力,使用方法也十分簡單,首先,先 cd 到目標目錄。例如,我的目標在 /media/<username>/<label>,也就是隨身碟根目錄,所以我輸入:

cd /media/<username>/<label>

小技巧:

▲在 Ubuntu 中,你可以按下鍵盤上的 Ctrl + L 顯示完整路徑,方便複製文字

接下來,使用 iconv 指令(iconv -f(rom) -t(o) <file>)轉換

iconv -f <來源編碼> -t <目的編碼> <路徑+檔名> [-o <新檔案名稱>]

OK,搞定,就是這麼簡單,再也不用因此苦惱!

 

範例:

class TestWrapper
{
    public static void main(String[] arg)
    {
        /** 省略 **/
        /*                                         
        �����ϥ�Double.parseDouble�A���@��       
        */
        System.out.println("int�ܼƪ��̤j��:" + Integer.MAX_VALUE);
        System.out.println("int�ܼƪ��̤p��:" + Integer.MIN_VALUE);
        System.out.println("int���O�Ҧ����O�����Ŷ�:" + Integer.SIZE);
        /** 省略 **/
    }
}

▲ 轉換前(部份省略)

iconv --from-code=big5 --to-code=utf8 TestWrapper.java --output=TestWrapperUTF.java

▲ 轉換指令

class TestWrapper
{
    public static void main(String[] arg)
    {
        /** 省略 **/
        /*                                            
        全部使用Double.parseDouble再轉一次      
        */
        System.out.println("int變數的最大值:" + Integer.MAX_VALUE);
        System.out.println("int變數的最小值:" + Integer.MIN_VALUE);
        System.out.println("int型別所佔的記憶體空間:" + Integer.SIZE);
        /** 省略 **/
    }
}

▲ 轉換後(部份省略)

 

指令詳細資訊:

不知道各位有沒有發現,小獅在前後使用不同的格式,分別是 “-t” 和 “–to-code=”,因為 iconv 其實可以支援許多不同種的指令格式,很方便使用呢!

我們先看一下它的說明:

$ iconv --help
使用方式: iconv [參數…] [FILE…]
從給定的檔案的字元編碼轉換到另一個

 輸入/輸出格式設定:
  -f, --from-code=名稱     原始文字的編碼
  -t, --to-code=名稱       用來輸出的編碼

 資料:
  -l, --list                 列出所有已知的編碼字元集

 輸出控制:
  -c                         省略無效字元的輸出
  -o, --output=檔案        輸出檔案
  -s, --silent               停止輸出警告訊息
      --verbose              印出程序相關資訊

  -?, --help                 給出這個使用方式列表
      --usage                給出簡短的使用訊息
  -V, --version              印出程式版本

長選項的必須或可選用的引數也是相對應短選項的必須或可選用的引數。

要知道錯誤報告指令,請參看:
<https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs>。

就像大部分的 Linux 程式一樣,可以使用的指令有常有短,短的適合平常快速操作,長的適合指令稿的撰寫!

此外,iconv 的指令其實是很自由的,可以任意組合,同樣一種指令可以有好多不同的寫法,連編碼名稱也OK

iconv --from-code=big5 --to-code=utf8 TestWrapper.java --output=TestWrapperUTF.java

# 或

iconv -f big5 -t utf8 TestWrapper.java -o TestWrapperUTF.java

# 或

iconv --from-code=big-5 --to-code=utf-8 TestWrapper.java -o TestWrapperUTF.java

不一定要都用長的或短的格式(但建議這樣),編碼名稱也可以加上連字號(-)!

 

另外,若不想寫入檔案,只想先預覽的話,只要去掉 “-o” “–output=” 就好了,像這樣:

iconv --from-code=big5 --to-code=utf8 TestWrapper.java

 

謝謝收看!

發表迴響