2011-04-26 2 views
1

OS X의 파일 이름에서 움라우트 (ü 문자)에 문제가 있습니다. 펄 스크립트에서 디렉토리를 만들고 있습니다. 개념적으로 내가 무엇을하고 있어요 것은 :OS X 파일 이름의 Umlaut (perl)

$NAME = "abcüabc"; 
$PATH = "/Applications/MyProgram/".$NAME."/"; 
system('ditto', '--rsrc', $FROMPATH, $PATH . $FILENAME); 

이 이름 "/Applications/MyProgram/abs%9Fabc/"으로 폴더를 만듭니다.

누구든지 올바른 문자로 디렉토리를 만들 수있는 방법을 알고 있습니까?

use utf8; 

을 펄 소스에 당신이 그 문자열 대신 바이너리의 문자로 해석 될 것으로 예상하는 경우 :

+3

** OMIGOD! 당신은 MacRoman을 사용하고 있습니다! ** MacRoman 0x9F ⇒ U + 00FC <ü> \ N {대화 상대와 함께 작은 편지}. 그리고 어쨌든 파일 시스템에 U + 00FC라는 문자를 사용할 수 없습니다. 왜냐하면 파일 시스템은''u ''와''\ N {COMBINING DIAERESIS}''에 이어 분해되기 때문입니다. 실제로 Perl 소스 코드에 MacRoman 문자를 입력 했습니까? 그러나 당신은 ** 그 **을 했습니까? 유니 코드로 변환하십시오 !! Perl은 소스 코드가 기존 MacRoman에 있다는 것을 전혀 모릅니다! U + 009F는 "\ N {APPLICATION PROGRAM COMMAND}"를 의미하는 제어 코드입니다. – tchrist

+0

나는 왜 그런지 모르지만, tchrists 코멘트는 꽤 오싹하다./ – JustSid

+1

@JustSid : "Creepy"? 정말? 어째서? 내가 무슨 일이 일어 났는지 깨달았을 때 나는 몹시 괴롭 혔다. 왜''ü '대신에'% 9F'를 보았는지 알 수 없었습니다.''나는''문자'가 아닌 제어 문자에서만 생각했습니다. 그래서 나는 U + 009F 코드 포인트를 보았고, 그 코드는 제어 문자였습니다. Macroman (http://training.perl.com/scripts/macroman)을 통해 실행 한 것보다 낫지 만 여전히 내가 알아 내려고 애쓰는 것은 wicked하고 사악한 편집자가 pre-OS X 레거시를 기본값으로 사용하는 것입니다 MacRoman의 인코딩. 아무것도 기본 설정하지 않아야합니다. – tchrist

답변

6

당신은 말해야한다.

% 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} 

그리고 그것은 "\N{COMBINING DIAERESIS}" 다음에 "u"으로 분해하기 때문에 당신은 어쨌든 파일 시스템의 문자 U + 00FC을 가질 수 없습니다. 실제로 Perl 소스 코드에 MacRoman 문자를 입력 했습니까? 그러나 당신은 THAT을 했습니까? 유니 코드로 변환하십시오 !! Perl은 소스 코드가 기존 MacRoman에 있다는 것을 전혀 모릅니다! U + 009F는 "\ N {APPLICATION PROGRAM COMMAND}"를 의미하는 제어 코드입니다. 여기

는 시계 :

당신은 grab the uniquote program from here
% 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 script을받을 수도 있습니다.

어떻게 든 Perl 코드에 추한 오래된 MacRoman을 입력 한 것으로 보입니다. 제발 유니 코드로 변환하십시오!

% iconv -f MacRoman -t UTF-8 <input> output 
+0

그냥 나야 아니면 그 코드 블록의 마지막 줄에'ü '이 보이지 않습니까? ("편집"모드 미리보기에 나타납니다.) – Mat

+1

@Mat : 그것은 당신뿐입니다. :) 그것이 의미하는 바는 결합 문자를 망가 뜨리는 브라우저 (또는 터미널 프로그램)를 사용하고 있다는 것입니다. 다윈은 자동적으로 NFD의 파일 이름을 사용합니다. 따라서 Perl 코드는 abc \ N {abl \ n {abi \ n {abi}} abc \ "{abc \"{abc \ "{abc"}}를 사용합니다. 차이점을 보시겠습니까? – tchrist

+0

@ tchirst : 정보 주셔서 감사합니다. 'lynx'를 제외한 모든 브라우저가 실패합니다! 오페라는 적어도 그것을 쏘아주고 움라우트 마크 _after_를 표시합니다. 가장 중요한 부분은 어떤 오페라 디스플레이에서이 창 (크롬)으로 복사/붙여 넣기를 시도하면 자동으로 올바른 'ü'로 다시 스크롤됩니다 .-)) – Mat