PR

マルチバイトのファイル名をそれなりに処理するV0.02

# 機能:マルチバイトのファイル名をそれなりに処理する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”;
}

コメント