言わなくちゃいけない:
use utf8;
これらの文字列がバイナリではなく文字として解釈されると予想される場合は、Perl ソースで。
% uname -a
Darwin arwen 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386
% cat /tmp/makeit
use utf8;
$name = "abcüabc";
$path = "/tmp/$name";
mkdir($name,0777) || die "can't mkdir $path: $!";
% perl /tmp/makeit
% ls -dF /tmp/abc*
/tmp/abcüabc/
見る?あなたがそれをするなら、それはうまくいきます。
編集:MacRomanを使用しています!
% macroman 0x9F
MacRoman 0x9F ⇒ U+00FC ‹ü› \N{LATIN SMALL LETTER U WITH DIAERESIS}
とにかく、ファイルシステムに文字 U+00FC を含めることはできません。これは、"u"
その後に続く"\N{COMBINING DIAERESIS}"
. 実際に Perl ソース コードに MacRoman 文字を入力しましたか? しかし、あなたはそれをしましたか?Unicodeに変換してください!! Perl は、あなたのソース コードがレガシー MacRoman にあることを知りません! U+009F は「\N{APPLICATION PROGRAM COMMAND}」を意味する制御コードです。
ここで、見てください:
% cat /tmp/makeit
use utf8;
$name = "abcüabc";
$path = "/tmp/$name";
mkdir($name,0777) || die "can't mkdir $path: $!";
% uniquote /tmp/makeit
use utf8;
$name = "abc\N{U+FC}abc";
$path = "/tmp/$name";
mkdir($name,0777) || die "can't mkdir $path: $!";
% uniquote -v /tmp/makeit
use utf8;
$name = "abc\N{LATIN SMALL LETTER U WITH DIAERESIS}abc";
$path = "/tmp/$name";
mkdir($name,0777) || die "can't mkdir $path: $!";
% uniquote -b /tmp/makeit
use utf8;
$name = "abc\xC3\xBCabc";
$path = "/tmp/$name";
mkdir($name,0777) || die "can't mkdir $path: $!";
% perl /tmp/makeit
% ls -Fd /tmp/abc* | uniquote -v
/tmp/abcu\N{COMBINING DIAERESIS}abc/
ここからuniquoteプログラムを取得できます。ファイルに実際に含まれているものが表示されます。また、マクロマンスクリプトも入手できます。
Perl コードに醜い古い MacRoman を入力したようです。Unicodeに変換してください!
% iconv -f MacRoman -t UTF-8 < input > output