我正在尝试使用 paramiko 和 python 从 sftp 下载文件。 我没有找到任何解决方案来避免 unicode 错误。
它可以使用 sftp.get() 方法工作,但我必须首先过滤文件名,因为它是动态的。
for entry in sftp.listdir_attr(path):
mode = entry.st_mode
if S_ISREG(mode) and "erapsuspj" in entry.filename:
list_rep.append(entry.filename)
我收到以下错误:
File ".....\getRep.py", line 49, in <module>
for entry in sftp.listdir_attr(path):
File ".....\paramiko\sftp_client.py", line 254, in listdir_attr
filename = msg.get_text()
File ".....\site-packages\paramiko\message.py", line 184, in get_text
return u(self.get_string())
File ".....\site-packages\paramiko\util.py", line 333, in u
return s.decode(encoding)
有什么想法吗?
谢谢, 亚历克斯
在SFTP中,所有字符串都是UTF-8。您的 SFTP 服务器似乎已损坏并且正在以其他编码发送文件名。
没有简单的解决方案。 Paramiko(正确地)不允许您更改它用于解码文件名的编码。
您可以自己实现
listdir_attr
所做的事情,除了 UTF-8 解码之外。请调用 msg.get_text()
,而不是 msg.get_string().decode(actual_encoding)
。
或者修补
u()
函数以使用其他编码。