ファイル名、ディレクトリ名の多国語化

前に書いた perl 5.8.2 の続き。

あまりうまくない。たまたまUS-ASCIIの範囲であれば変換してもしなくても同じなのでこの問題は無視できるが、そうでないならファイルパスを受け取る時も渡す時もプラットホームのコードページにあわせて変換が必要になる。

use utf8;
use Encode;
binmode($_,":encoding(cp932)") for STDIN,STDOUT,STDERR;
my $dir = "j:\\xterm\\ほげほげ";
print "is_utf8? ",utf8::is_utf8($dir),"\n";
print chdir encode('cp932',$dir);

opendir(DIR,'j:\\xterm') or die $!;
@list = readdir DIR;
closedir DIR;
for(@list){ print "entry: ",decode('cp932',$_),"\n";}

perlrun の -C を見ると

(In Perls earlier than 5.8.1 the -C switch was a Win32-only switch that enabled the use of Unicode-aware ``wide system call'' Win32 APIs. This feature was practically unused, however, and the command line switch was therefore ``recycled''.)

(5.8.1より前のperlでは-CスイッチはWin32 APIunicodeを意識した「wide system call」の使用を有効にするwin32専用のスイッチだった。この機能は実質的に使われなかったので、その結果コマンドラインスイッチはリサイクルされた。)

とほほ。