FTP 文件名编码

1 投票
2 回答
3641 浏览
提问于 2025-04-16 11:37

你好,
我在用 twisted 这个库连接 FTP 服务器的时候遇到了文件名编码的问题。
我收到的文件名是 'Illusion-N\xf3z.txt',所以它不是 Unicode 编码。
有没有什么 FTP 命令可以强制使用特定的编码呢?
提前谢谢你!
MK

2 个回答

2

FTP在处理文件名时不太关心编码,只要文件名里没有'\0'(空字符)和'/'(斜杠)来分隔文件夹,它就能接受任何东西。

你需要自己处理文件名的编码和解码。你提到的例子中,很可能使用的编码是“cp1252”,也就是“Windows西方编码”之类的。

在你的例子中,当你收到'Illusion-N\xf3z.txt'时,可以通过'Illusion-N\xf3z.txt'.decode('cp1252')把它转换成Unicode格式。

4

这里有两种可能性:

  • FTP不支持Unicode。看起来你提到的这个服务器发送的是Latin-1编码的字节。所以当你接收到这些字节时,需要用这种编码来解码。
  • 有一个RFC文档,更新了FTP,使其支持UTF-8编码。你可以通过执行FEAT命令来检查是否有UTF8这个选项(但可能没有,因为示例中的字节不是有效的UTF-8)。如果有的话,就用UTF-8来解码这些字节。

Twisted的FTP客户端不会处理任何与Unicode相关的内容,因为它只是实现了基本的FTP规范。

撰写回答