介紹如何在 Linux 系統中使用 file
與 iconv
指令查詢與轉換檔案編碼,處理 Big5 與 UTF8 檔案亂碼問題。
遇到含有中文的文字檔出現亂碼時,通常都是因為檔案採用不對的編碼所造成的,只要修正編碼之後即可恢復正常。在大多數的情況下,Linux 系統下會出現亂碼的中文檔案都是採用 Big5 編碼,只要轉為 UTF8 就可以正常使用了。
檢查檔案編碼
在 Linux 中若要檢查文字檔案的編碼,可以使用 file
指令:
# 檢查檔案類型
file myfile1.txt
myfile1.txt: UTF-8 Unicode text
file
指令預設會顯示讓人易讀的檔案格式說明文字,如果想要以精確的 MIME 類別格式來表示,可以加上 -i
參數:
# 檢查檔案類型(顯示 MIME 類別) file -i myfile1.txt
myfile1.txt: text/plain; charset=utf-8
file
指令也可以一次檢查多個檔案的編碼:
# 檢查多個檔案的類型
file *.txt
myfile1.txt: UTF-8 Unicode text myfile2.txt: ISO-8859 text
如果是 Big5 編碼的檔案,在使用 file
指令檢查時,通常會顯示 ISO-8859
,像這裡的 myfile2.txt
就是一個 Big5 編碼的文字檔案。
轉換 Big5、UTF8 等檔案編碼
若要在 Linux 中轉換文字檔的編碼,可以使用 iconv
指令。例如將 Big5 編碼的檔案轉為 UTF8 編碼:
# Big5 編碼轉 UTF8 編碼 iconv -f big5 -t utf8 -o output.txt input.txt
其中 -f
參數是指定來源資料的編碼,-t
參數則是指定目的資料的編碼,而 input.txt
是輸入的檔案,轉出的結果會儲存在 output.txt
中。
若要反過來將 UTF8 編碼的檔案轉換為 Big5 編碼,只要把編碼對調即可:
# UTF8 編碼轉 Big5 編碼 iconv -f utf8 -t big5 -o output.txt input.txt
若要查詢 iconv
指令所支援的編碼,可以使用 -l
參數:
# 查詢所有支援的編碼格式 iconv -l
自動批次轉換編碼
以下的指令稿可以檢查所有的文字檔,將所有 Big5 編碼的檔案清單儲存於 big5.list
中,並以迴圈將每一個 Big5 編碼的檔案轉換為 UTF8 編碼:
# 產生 Big5 編碼的檔案清單,儲存於 big5.list file *.txt | grep "ISO-8859" | awk 'BEGIN {FS=":"};{print $1}' > big5.list # 讀取 big5.list 檔案清單,將檔案轉換為 UTF8 編碼 while read file; do iconv -f big5 -t utf8 -o "${file}.utf8" "${file}" done < big5.list