Umlauts在OS X中使用文件名(perl)

| 我在OS X的文件名中遇到了变音符号(ü字符)的麻烦。我正在从Perl脚本创建目录。从概念上讲,我正在做的是:
$NAME = \"abcüabc\";
$PATH = \"/Applications/MyProgram/\".$NAME.\"/\";
system(\'ditto\', \'--rsrc\', $FROMPATH, $PATH . $FILENAME);
这将创建名为“ 1”的文件夹。 任何人都知道如何解决此问题以使用正确的字符创建目录吗?     
已邀请:
你不得不说:
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/
您可以从这里获取单引号程序。它将向您显示文件中的实际内容。您还可以获取macroman脚本。 您似乎在Perl代码中以某种方式输入了丑陋的MacRoman。请转换为Unicode!
% iconv -f MacRoman -t UTF-8 < input > output
    

要回复问题请先登录注册