Python ftputil 上传失败
文章目录
介绍
Python ftputil 模块在上传时报错:
|
|
环境
- Python 3.7
- Windows 7
思路
搜索
如果只是单纯地搜索最后的 UnicodeEncodeError
大部分只会搜到文件编码出现问题,需要在 ftplib 中指定正确文件编码。
但实际上项目中使用的是 ftputil,ftputil 是一个对 Python 标准库 ftplib 的封装,ftputil 并没有暴露所有接口,因此无法直接修改 ftplib 属性。
在尝试修改 ftputil 的文件编码后发现依然无效,仔细搜索后发现有问题提示这与文件路径编码有关,仔细查看报错发现问题出在文件名中存在中文。
重现
使用 Python 做一个小实验,确定中文会不会引起问题:
|
|
思考
ftputil 作者在这篇贴子里介绍了一下问题来源,ftputil 底层使用 ftplib,然而最底层 socket 传输的只是字节,ftplib 也不知道编码是什么,只能认为是 latin-1
贴子中的例子正好是从服务器接收到的文件名乱码问题,可以将字符串先以 latin1编码,再以 utf8 解码就可以将内容还原。
其实这与客户端上传文件类似,Python 使用 Unicode 表示字符串,在传递时需要以具体的编码传递。
解决方案
正确的解决方案是在调用 upload
方法前将文件路径字符串参数以 utf-8
编码:
|
|
使用其他 FTP 软件连接 FTP 服务器,发现上传文件路径中的中文可以正常显示。
文章作者 狂飙
初次发布 2020-03-08 22:37:28 +0800
永久链接 https://networm.me/2020/03/08/python-ftputil-upload-fail/