2013-11-24 60 views
0

我使用Net :: FTP訪問PVR(衛星接收器)並檢索錄製的視頻文件。使用dir()子例程獲得所有文件的列表可以正常工作,但是如果文件名包含非ASCII(UTF8)字符,則對這些文件的調用mtdm()get()將失敗。下面是一個例子(包含德國的「變音」):只有包含ASCII字符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 

文件名工作得很好。通過其他FTP軟件訪問非ASCII字符的文件也可以。

有沒有人有一個想法,我可以做這個工作?顯然,我不能簡單地避免文件名中的「變音符號」。

+2

大多數操作系統和Perl認爲文件名是任意字節,所以問題是:你傳遞給Net :: FTP的字節是什麼?什麼字節形成相關係統上的文件名?具有'local $ Data :: Dumper :: Useqq = 1;'的Data :: Dumper將有助於向我們提供這些數據。 – ikegami

+1

你確定它是utf-8嗎?也許這只是拉丁-1。 –

+0

我通過從'dir()'接收到的內容。根據你的建議,我已經檢查過,從dir()接收的數據和我用mdtm()使用的文件名都是UTF8編碼的。 – ChrisB

回答

0

謝謝ikegame和Slaven Rezic,你的建議幫助我解決了這個問題。

總結一下:這是Topfield SRP2100 FTP實現中的一個錯誤。問題不在於Perl或Net :: FTP相關。在RETR命令執行時,MDTM命令不接受非ASCII字符。我使用網絡嗅探器檢查了我的代碼和Net :: FTP做的一切正確。在FTP命令中發送的所有文件名都是100%正確的。

我通過解析dir()的輸出中顯示的日期而不是使用非ASCII文件名的MDTM來解決問題 - 這不是一個好的解決方案,但它工作。