我在OS X的文件名中遇到了一些变音(ü字符)的问题。我是从perl脚本创建目录的。从概念上讲,我所做的是:
$NAME = "abcüabc";
$PATH = "/Applications/MyProgram/".$NAME."/";
system('ditto', '--rsrc', $FROMPATH, $PATH . $FILENAME);这将创建名为"/Applications/MyProgram/abs%9Fabc/"的文件夹。
有人知道我如何修复这个问题以创建包含正确字符的目录吗?
发布于 2011-04-27 02:13:11
你必须说:
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,因为它会分解为后面跟着"\N{COMBINING DIAERESIS}"的"u"。您是否真的在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 program from here。它将向您显示文件中的真实内容。您还可以获得 script。
您似乎以某种方式在Perl代码中输入了丑陋的旧MacRoman。请转换成Unicode!
% iconv -f MacRoman -t UTF-8 < input > outputhttps://stackoverflow.com/questions/5793548
复制相似问题