24h購物| | PChome| 登入
2009-06-02 01:01:00| 人氣3,802| 回應0 | 上一篇 | 下一篇

BIG5跟UTF8互轉的中文轉碼小東西

推薦 0 收藏 0 轉貼0 訂閱站台

 
在論壇上看到有人在問ubuntu有類似convertz的工具軟體嗎?
引發的討論出現好東西

一個是轉檔案內文的iconv,利用它可以快速將BIG5跟UTF8編碼的中文資料轉碼。
一個是轉檔案名稱的convmv,只能用來修改中文檔名的編碼

可是他們都有共通的問題,要用終端機,打出正確的指令才會運作。不知道是哪邊的問題,我試過通常只能轉一個檔案,網路找到的指令也是僅限一個檔案。雖然早安裝了,但卻很少拿來用。(而且遇到文字中間夾有不明東西時,文章還會中斷......)

mosky前輩(在此向其脫帽致敬)非常好心的提供shell scrip。這玩意只要將文字內容貼在空白檔案,改變檔案屬性的權限,允許以程式執行,就能成為很棒的小工具。

可惜mosky前輩提供的內容,好像會出現無限迴圈的狀況,即使是修改後的新版,在遇到資料夾層數超過預設,或是其他的狀況,也還是有無限繁殖的問題。

(不過比我好,我竟然寫出不斷增殖、重複持續產生同樣檔案、刪除又會自動回復的東西來。惡意程式等級的語法)

將mosky前輩(再次脫帽致敬)作品反覆研究後,取消掉自動尋找子目錄的功能,讓小工具只會在同一層目錄進行轉碼,免的在眼睛看不到的地方,發生意想不到的意外。
而轉出的檔案,通通集中到家目錄的特定資料夾內,省的要用時又要東奔西跑找檔案。

家目錄版本的,同時轉檔名及轉檔案內文,然後產生新檔。


#!/bin/bash
#iconv_BIG5toUTF8
function START()
{
    for fileName in `ls -F | grep '.txt'` #找尋資料夾內所有的TXT檔案
    do
        echo '   Converting: "'$fileName'"...'; #輸出轉換中訊息
        convmv "$fileName" -f big5 -t utf8 -o "$fileName" #轉檔名
        mkdir ~/newutf8
        echo '   Converting: "'$fileName'"...'; #輸出轉換中訊息
        iconv "$fileName" -f big5 -t utf8 -o ~/newutf8/"$fileName" #轉內容
    done;


}
echo ; #程序開始訊息
START; #執行遞迴函數
echo 'Done!'; #完成訊息

這是會修改原檔名的作法。

改變順序後應該不會動到原檔案。(雖然舊檔在UBUNTU上通常已成廢物,但還是保留比較好。畢竟用LINUX的人習慣在把舊檔名加.bak,不保留舊檔會不舒服似的...)

#!/bin/bash
#iconv_BIG5toUTF8
function START()
{
    for fileName in `ls -F | grep '.txt'` #找尋資料夾內所有的TXT檔案
    do
        mkdir ~/newutf8
        echo '   Converting: "'$fileName'"...'; #輸出轉換中訊息
        iconv "$fileName" -f big5 -t utf8 -o ~/newutf8/"$fileName" #轉內容
        echo '   Converting: "'$fileName'"...'; #輸出轉換中訊息
        convmv ~/newutf8/"$fileName" -f big5 -t utf8 -o ~/newutf8/"$fileName" #轉檔名
    done;


}
echo ; #程序開始訊息
START; #執行遞迴函數
echo 'Done!'; #完成訊息

第一次玩這個,應該還有很多修改空間。比如研究怎樣自動在原本的檔案名加.bak、處理的子目錄層數並避免無循環限……幫新檔創造相對應子目錄,或是很複雜的同時轉出GB碼及BIG5碼的版本。(同時在不同網站貼文應該很方便~不過這好像用同文堂比較快)

但現在的程度,我已經很滿足了。(一鍵下去,檔名跟內文都轉好了。發現的BUG是iconv本身的狀況~)

感謝mosky前輩

台長: 飄雪寒燕(不良薯)
人氣(3,802) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: Ubuntu界 |
此分類下一篇:Ubuntu突然沒聲音的簡單解法
此分類上一篇:一鍵搞定rTorrent

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文