# 機能:マルチバイトのファイル名をそれなりに処理するw
# 宣言:use File::Basename;
# 引数:ファイル名(あ.jpg)
# 戻値:コンバート後のファイル名
# あ.jpg -> %e3%81%82.jpg (拡張子.JPG)
# あ.あ -> %e3%81%82%2e%e3%81%82 (拡張子なし)
sub convMbFilename{
my $filename = shift;
# Windows形式をUnix形式のパスに変換する
# windows(C:\aaa\aaa.jpg)
if($filename =~ m/^([A-Za-z]:)(.+)/){
$filename = $2;
$filename =~ s/\\/\//g;
}
# パスからファイル名を取得(aaa.jpg)
$filename = basename($filename);
my $ext = $filename;
# 期待する命名規則であれば拡張子を取得する
if($ext =~ m/\.([^\.][0-9a-zA-Z]*)$/){
# 拡張子を取得する
$ext = $1;
# コンバート前段階の準備として、引数の
# ファイル名に含まれている拡張子を除去
$filename =~ s/\.${ext}$//i;
}else{
# 命名規則に従っていないものは拡張子なし
$ext = undef;
}
# 変換処理
$filename =~ s/([^\w ])/’%’.unpack(‘H2’, $1)/eg;
$filename =~ tr/ /+/;
# ファイル名がない場合は不明なファイル名とする
$filename = ‘Unknown’ unless $filename;
# 変換したファイル名とあれば拡張子を付加して返す
$filename .= “.$ext” if $ext;
return “$filename”;
}
コメント