2013-11-24 3 views
0

Net :: FTP를 사용하여 PVR (위성 수신기)에 액세스하고 녹화 된 비디오 파일을 검색합니다. dir() 서브 루틴을 사용하는 모든 파일 목록을 얻는 것이 좋지만 파일 이름에 ASCII가 아닌 문자가 포함되어있는 경우 mtdm()get()을 호출하면이 파일에 대해 실패합니다. 다음은 독일어 ("움라우트"포함)의 예입니다.Perl Net :: 파일 이름에 FTP 및 비 ASCII (UTF8) 문자

Net::FTP=GLOB(0x253d000)>>> MDTM /DataFiles/Kommissar Beck ~ Tödliche Kunst.rec 
Net::FTP=GLOB(0x253d000)<<< 550 Can't access /DataFiles/Kommissar Beck ~ Tödliche Kunst.rec 

ASCII 문자 만 포함하는 파일 이름이 정상적으로 작동합니다. 다른 FTP 소프트웨어를 통해 비 ASCII 문자로 파일에 액세스하는 것도 잘 작동합니다.

누구나 내가이 작업을 어떻게 할 수 있을지 생각하지 못합니까? 분명히 단순히 파일 이름에서 "움라우트"를 피할 수는 없습니다.

+2

대부분의 OS와 Perl은 파일 이름을 임의의 바이트로 간주하므로 질문 : Net :: FTP로 전달한 바이트 수는 얼마입니까? 어떤 바이트가 해당 시스템의 파일 이름을 구성합니까? Data :: Dumper with'local $ Data :: Dumper :: Useqq = 1; '은이 데이터를 우리에게 제공하는데 도움이 될 것입니다. – ikegami

+1

당신은 utf-8입니까? 아마 라틴어 -1 일 뿐이에요. –

+0

나는'dir()'에서받은 것을 전달합니다. 귀하의 제안에 따라'dir()'에서받은 데이터와'mdtm() '에서 사용하는 파일 이름이 모두 UTF8로 인코딩되었음을 확인했습니다. – ChrisB

답변

0

ikegame 및 Slaven Rezic에게 감사드립니다. 귀하의 제안으로 문제가 해결되었습니다.

요약하면 Topfield SRP2100의 FTP 구현 버그입니다. 문제는 Perl이나 Net :: FTP와 관련이 없습니다. MDTM 명령은 RETR 명령이 수행하는 동안 비 ASCII 문자를 허용하지 않습니다. 내 코드와 Net :: FTP가 모든 것을 제대로하고 있다는 것을 네트워크 스니퍼가 검사했다. FTP 명령에서 보낸 모든 파일 이름은 100 % 정확합니다.

비 ASCII 파일 이름에 MDTM을 사용하는 대신 dir()의 출력에 표시된 날짜를 구문 분석하여 문제를 해결했습니다. 좋은 해결책은 아니지만 작동했습니다.