你不得不说:
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 {应用程序命令}”。
这里,看:
% 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/
你可以grab the uniquote program from here。它会告诉你什么是真正的文件。您也可以获得macroman script。
您似乎在某个Perl代码中输入了丑陋的旧MacRoman。请转换为Unicode!
% iconv -f MacRoman -t UTF-8 <input> output
** OMIGOD!您正在使用MacRoman!** MacRoman 0x9F⇒U + 00FC <ü> \ N {拉丁字母小写字母U}。而且在文件系统中你不能有U + 00FC这个字符,因为它会分解成一个''u'',然后是'\ N {COMBINING DIAERESIS}“。你真的在你的Perl源代码中输入了MacRoman字符吗?但是你做了**那**吗?请转换为Unicode! Perl不知道你的源代码是在传统的MacRoman中! U + 009F是一个控制代码,意思是“\ N {应用程序命令}”。 – tchrist 2011-04-26 19:36:04
我不知道为什么,但tchrists评论是相当令人毛骨悚然=/ – JustSid 2011-04-26 19:55:43
@JustSid:“令人毛骨悚然”?真?怎么来的?一旦我意识到发生了什么事,我就快速成长起来。我无法弄清楚为什么他会看到'%9F'而不是'ü',我认为'ls'只对控制字符,而不是字母。于是我查找了U + 009F的代码点,果然,它*是一个控制字符。而不是我通过[macroman](http://training.perl.com/scripts/macroman)执行它,ᴇᴜʀᴇᴋᴀ!我仍然试图弄清楚什么是邪恶的,邪恶的编辑默认了OS X之前的遗产MacRoman的编码。没有什么应该默认的。 – tchrist 2011-04-26 21:40:26