2011年7月20日 星期三

UNICODE系統上討人厭的big5碼檔名


在Linux上就常常遇到M$-Windows給的檔案名稱用big5碼,這東西一到UNICODE的系統上就通通是亂碼,超煩的。

好險 Linux 上有個命令convmv可以解決檔名的問題,當然如果遇到阿六仔的GB2312也可以用,把big5改成gb2312就好。
  • 安裝
#apt-get install convmv
  • 使用方式
convmv -f big5 -t utf-8 -r --notest ./*
  • 相關參數說明
convmv -f big5 -t utf-8 -r --notest *
  • -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)
  • -t utf-8: 轉換編碼到 UTF-8
  • -r: 遞迴的將目錄下的所有檔名都做轉換
  • --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.
  • ./*: 當前目錄下所有檔案
  • --list : 列出所有可用的編碼
  • --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")
  • --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)
  • --upper : 將所有檔名都轉大寫
  • -i : 互動模式, 轉換前會先經過 y/n 確認
另外,檔案內容也有命令可以轉換,最常用的是電影字幕的轉換,我家播放器是在Linux上的XBMC,還蠻常碰到字幕檔用big5碼寫的。

  • iconv
 iconv -c -f big5 -t utf8 要轉檔的檔案名稱 > 轉完後的檔案名稱
 參數:
  • -c 省略無效字元的輸出
  • -f 要轉檔的檔案編碼
  • -t 轉完後的檔案編碼
iconv同時有Perl的模組可以使用叫libtext-iconv-perl

  • perl code:
use Text::Iconv;

my $converter = Text::Iconv->new("utf-8", "big5");
$buffer=$converter->convert($buffer);

my $ck = sent_to_ckip($buffer);

$converter = Text::Iconv->new("big5", "utf-8");
$ck=$converter->convert($ck);

沒有留言:

張貼留言