2013年9月1日 星期日

轉換 BIG5 文字檔到 UTF8


今天早上把一些檔案整理了一下,發現有一些是早期寫的文章,那時候 UTF8 還沒有那麼直覺,所以編碼直接就用 BIG5。

到了現在,檔案的溝通大部分都是以 UTF-8 作為編碼格式,這時候就會發現,要統一做一些處理有點困難,所以得想一個辦法把檔案從 BIG5 轉成 UTF-8。


稍微 Google 了一下,才想起以前就用過的 iconv 大法,順手寫了一個小 Script 來進行文字檔轉換,想說也許會有人有需要,就記錄在這邊。

首先呢,你需要一台 Linux,不管是實體機器還是 Virtual Machine 都可以,因為底下寫的東西是靠 Linux 上面的命命來完成,包括 Script 都是,所以如果您現在沒有,那要不就是找一台 Linux 來用,要不,就按上一頁離開吧,免得失望。

主要我們要用的指令,是 iconv 這個命令。

根據 Linux 上面的好朋友「男人」所表示的,這個命令主要需要三個參數,一個是你輸入的編碼格式,一個是你要輸出的編碼格式,最後就是你要處理的檔案。

預設是會輸出到螢幕上,如果想要指定輸出的檔案,就加一個輸出的參數。

所以整段指令會是:

iconv -f BIG5 -t UTF8 [inputfile.txt] -o [outputfile.txt]

表示我們要從 BIG5 編碼轉換到 UTF8 編碼,來源檔案是 inputflie.txt,結果會輸出到 outputflie.txt。

然後因為要自己一個一個打檔案名稱太麻煩,所以直接使用 ls + awk 幫我們把檔名撈出來。

ls -l *.txt | awk '{print $9}' > allfile.lst

就可以把所有的 txt 檔案的檔名撈到 allfile.lst 這個檔案裏面,我們再針對這個檔案做讀取動作去抓到每個文字檔的檔名,套用上面的操作即可。

整個 script 如下:


#!/bin/bash

FILELIST=allfile.lst
TMPFILE=conv.tmp

ls -l *.txt | awk '{print $9}' > $FILELIST

for f in `cat $FILELIST`
do
        echo "------> converting $f"
        iconv -f BIG5 -t UTF8 $f -o $TMPFILE
        if [ $? -eq 0 ]; then
                cp -a $TMPFILE $f
                echo  "... $f converted"
        else
                echo "Converting Error! No file copied!"
        fi
done

echo "All files were converted!"


有興趣的人就自行取用吧。

事實證明,懂一點 Linux + Shell Script 可以省下不少時間的。 :)


沒有留言:

張貼留言