【发布时间】:2011-03-08 09:51:52
【问题描述】:
有人可以确认 Python 2.6 ftplib NOT 支持 Unicode 文件名吗?还是必须对 Unicode 文件名进行特殊编码才能与 ftplib 模块一起使用?
以下电子邮件交流似乎支持我的结论,即 ftplib 模块仅支持 ASCII 文件名。
ftplib 是否应该使用 UTF-8 而不是 latin-1 编码? http://mail.python.org/pipermail/python-dev/2009-January/085408.html
对支持 Unicode 文件名的第 3 方 Python FTP 模块有什么建议吗?我用谷歌搜索了这个问题,但没有成功 [1]、[2]。
官方 Python 文档没有提到 Unicode 文件名 [3]。
谢谢你, 马尔科姆
[1] ftputil 包装了 ftplib 并继承了 ftplib 明显的 ASCII 仅支持?
[2] Paramiko 的 SFTP 库确实支持 Unicode 文件名,但我正在寻找与我们当前项目相关的 ftp(与 sftp)支持。
[3]http://docs.python.org/library/ftplib.html
解决方法:
encodings.idna.ToASCII 和 .ToUnicode 方法可用于将 Unicode 路径名转换为 ASCII 格式。如果您使用这些函数包装所有远程路径名和 dir/nlst 方法的输出,那么您可以创建一种使用标准 ftplib 保留 Unicode 路径名的方法(并且还可以在不支持的文件系统上保留 Unicode 文件名支持 Unicode 路径)。这种技术的缺点是服务器上的其他进程在引用您上传到服务器的文件时也必须使用 encodings.idna。顺便说一句:我知道这是对 encodings.idna 库的滥用。
感谢 Peter 和 Bob 提供的 cmets,我觉得这对我很有帮助。
【问题讨论】:
-
Daniel:我确实尝试过并得到了 ascii 异常。我不确定这是否是设计使然,因为我未能正确编码我的文件名(例如,我想知道 FTP 路径是否有类似于 encodings.idna 的东西),或者根本原因是由于特定的我正在连接的 FTP 服务器。