文件名中的Perl Net::FTP和非ASCII(UTF8)字符

文件名中的Perl Net::FTP和非ASCII(UTF8)字符,perl,ftp,perl-module,Perl,Ftp,Perl Module,我正在使用Net::FTP访问PVR(卫星接收器)并检索录制的视频文件。使用dir()子例程获取所有文件的列表可以正常工作,但是如果文件名包含非ASCII(UTF8)字符,则对这些文件调用mtdm()和get()失败。下面是一个示例(包含一个德语“umlaut”): Net::FTP=GLOB(0x253d000)>>MDTM/DataFiles/Kommissar Beck~Tödliche Kunst.rec Net::FTP=GLOB(0x253d000)谢谢ikegame和Slaven

我正在使用Net::FTP访问PVR(卫星接收器)并检索录制的视频文件。使用
dir()
子例程获取所有文件的列表可以正常工作,但是如果文件名包含非ASCII(UTF8)字符,则对这些文件调用
mtdm()
get()
失败。下面是一个示例(包含一个德语“umlaut”):

Net::FTP=GLOB(0x253d000)>>MDTM/DataFiles/Kommissar Beck~Tödliche Kunst.rec

Net::FTP=GLOB(0x253d000)谢谢ikegame和Slaven Rezic,您的建议帮助我解决了这个问题

总而言之:这是Topfield SRP2100 FTP实现中的一个bug。问题与Perl或Net::FTP无关。MDTM命令不接受非ASCII字符,而RETR命令接受。我用网络嗅探器检查了我的代码和Net::FTP是否一切正常。在FTP命令中发送的所有文件名都是100%正确的


我分析了这个问题,通过输出在 Drand()/<代码>中显示的日期,而不是使用非必需的ASCII文件名的DTMM——不是一个好的解决方案,但是它是有效的。

大多数OSS和Perl认为文件名是任意字节,所以问题是:你传递给NET::FTP的字节是什么?系统上的文件名由哪些字节组成?Data::Dumper与
local$Data::Dumper::Useqq=1将帮助向我们提供此数据。您确定它是utf-8吗?可能只是拉丁语-1。我把从
dir()
收到的东西传过来。根据您的建议,我已经检查了从
dir()
收到的数据以及与
mdtm()
一起使用的文件名是否都是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