2

我正在尝试使用 ftplib 将带有 unicode 内容的 XML 上传到 FTP 服务器,但是当我尝试使用 storbinary 方法上传时出现以下异常。XML 数据已正确编码为 un​​icode (utf-8),我已经确定了这一点,我不确定为什么 storbinary 在上传时尝试将其编码为“ascii”。有人可以帮忙吗?

--> 429 ftp.storbinary("STOR file.xml", xml)
    430
    431 def 运行(自我):

/usr/lib/python2.7/ftplib.pyc in storbinary(self, cmd, fp, blocksize, callback, rest)
    第463章
    464 如果不是 buf:中断
--> 465 conn.sendall(buf)
    466 如果回调:回调(buf)
    第467章

/usr/lib/python2.7/socket.pyc 在 meth(name, self, *args)
    222
    第223章
--> 224 返回 getattr(self._sock,name)(*args)
    225
    226 for _m in _socketmethods:

UnicodeEncodeError:“ascii”编解码器无法在位置 3368 编码字符 u'\xae':序数不在范围内(128)

4

2 回答 2

1

您应该将以二进制模式打开的文件传递给ftp.storbinary(). 例如,如果要将 Unicode 字符串作为filename文件上传:

import io

assert isinstance(unicode_string, unicode)
file = io.BytesIO(unicode_string.encode("utf-8"))
ftp.storbinary("STOR filename", file)

如果unicode_string包含xml;确保 xml 声明中使用的字符编码与您用于存储文件的编码一致。

于 2013-02-24T11:17:32.090 回答
0

我能够找到解决方案,@Cairnarvon 的评论部分正确,我正在对字符串进行编码,但是写入 StringIO 实例的字符串的其他位未编码。最后,我最终创建了 XML 位并将其编码为一个整体。您可以在下面的 pastebin 链接中看到我的代码;

http://pastebin.com/GugTLRQJ

于 2013-03-03T14:28:20.190 回答