Python 3.11 - 使用 Paramiko 返回 UnicodeDecodeError 列出文件

问题描述 投票:0回答:1

我正在尝试使用 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)

有什么想法吗?

谢谢, 亚历克斯

python paramiko
1个回答
0
投票

在SFTP中,所有字符串都是UTF-8。您的 SFTP 服务器似乎已损坏并且正在以其他编码发送文件名。

没有简单的解决方案。 Paramiko(正确地)不允许您更改它用于解码文件名的编码。

  • 您可以自己实现

    listdir_attr
    所做的事情,除了 UTF-8 解码之外。请调用
    msg.get_text()
    ,而不是
    msg.get_string().decode(actual_encoding)

  • 或者修补

    u()
    函数以使用其他编码。

© www.soinside.com 2019 - 2024. All rights reserved.