PYSFTP.listdir_attr() - UnicodeDecodeError:“utf-8”编解码器无法解码位置 8 中的字节 0x96:无效起始字节

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

我在尝试从 Python(pysftp 包)中的 SFTP 目录检索文件列表时遇到困难。在以下代码行中观察到错误:

file_list = sftp.listdir_attr(remote_directory)

错误信息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 17: invalid start byte

我查看了目录中的文件命名约定,虽然看起来没有什么是唯一的,但我们确实使用了 [ ] ( ) $ @ ! - _ + = 等。我们希望按原样保留 SFTP 中的文件名(由客户端上传;需要为映射保留相同的文件名)。

我尝试使用 paramiko,它给了我相同的结果。我也尝试更改代码如下:

file_list = sftp.listdir_attr(remote_directory.encode('utf+8', errors='ignore').decode())

尽管探索了潜在的解决方案,例如完全忽略目录(这对我们来说不可行)或尝试解码指定行之后的文件名(这是不可能的,因为错误恰好发生在该行),但问题仍然存在。在我们的情况下,是否有任何替代方法或建议来解决此 UnicodeDecodeError?

此外,SFTP 位于防火墙后面,在授予访问权限之前需要将 IP 地址列入白名单。但是,我认为这不是问题,因为我可以访问 SFTP 服务器上的一些其他目录。另外,我可以通过其他工具(cyberduck)访问上述目录。

我将不胜感激任何帮助。谢谢!

python sftp pysftp
1个回答
0
投票

作为快速修复,将 SFTP 客户端配置为使用 ISO-8859-1 文件名编码,而不是默认的 UTF-8。这样就可以成功了。

您可能需要不同的编码才能正确获取非 ASCII 字符,并且您必须猜测它是哪种编码。如果您需要帮助猜测,请提出单独的问题。

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