2007/03/15

filename big5 to utf8 - 檔名轉換編碼

若你也有跟我一樣想把系統上的檔名從 big5 編碼轉成 utf8 的編碼,也許會對這篇有興趣。當然這篇的內容對反過來應用一樣有用。我直接貼一個片斷,您可以存成像 b2u.pl 然後執行。值得注意的是,若您的檔案樹是兩種編碼混合,那這個命令有點危險,通常這狀況不會發生。另外,此命令會把執行時所在命令下所有子目錄內所有檔案全部更改編碼,請確定這不會造成您的困擾,或許您必須確定要更改的目錄,然後 cd 過去再下此命令:
#!/usr/bin/perl
use Encode;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');

use Cwd;
my $cwd = getcwd;

@ls = `LC_ALL=zh_TW.UTF-8 LANGUAGE=zh_TW.UTF-8 LANG=zh_TW.UTF-8 /bin/ls -1R --hide="[a-z]*[0-9]*.*" .`;
$last_dir = ".";
foreach my $file (@ls) {
chomp $file;
$utf8 = decode("cp950", $file);
if ($utf8 =~ m/:$/) {
chop $utf8;
$last_dir = "$utf8";
}
elsif ($file ne $utf8) {
chdir $last_dir;
rename $file, $utf8;
chdir $cwd;
}
}

0 意見: