使用Python ftplib从FTP下载的文件编码不正确

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

我通过 FTP 从 NAS 检索文件有两种方式:

  1. 我有一个 .bat 文件:

    a)

    ftp -s:C:\TEMP\runTheDownload.txt
    (脚本调用txt中的代码)
    b) .txt 包含以下内容:

    open some.address.eu
    username
    password
    ascii
    
    quote "site SBDataconn=ANOTHER.ADD.RESS.HERE
    get 'THE.NAS.LOCATION.OF.THE.FILE' C:\TEMP\output.txt
    
  2. 我有一个带有上述输入的Python代码,其中我使用ftplib和以下代码:

    with FTP(ftp_server) as ftp:
        ftp.login(ftp_user, ftp_password)
        print("Connected to FTP server.")
    
        # Set transfer mode to ASCII
        ftp.sendcmd("TYPE A")
        # print("Switched to ASCII mode.")
    
        # Execute the custom FTP command (quote)
        ftp.sendcmd('SITE SBDataconn=ANOTHER.ADD.RESS.HERE')
        print("Custom SITE command executed.")
    
        # Download the file
        with open(local_file, 'wb') as file_obj:
            # Write info to buffer
            ftp.retrbinary(
                f"RETR {remote_file}", file_obj.write)
    

当我从第一种方法查看output.txt时,它给了我完美的数据,如

001
abc
2013230
...,但是Python输出给了我编码的返回,如:

\x7f\xf0\xf0\xf1\x7fk\x7f\xf0\xf0\xf0\xf0\xf1\xf0\xf2\xf4\xf9\x7fk\x7f\xf0\xf0\xf0\ xf0\xf0\xf0\xf0\xf0\xf0\x7fk\x7fN\xf0\x7fk\x7f\xf0\xf4\x7fk\x7f\xf0\xf0\x7fk\x7f@@@@ @@@@@@\x7fk\x7f\xd6\xd7\xc3\xe4\xe2\xc5\xd9@\x7fk\x7f\x81\xa4\xa3\x96\x94\x81\xa3\x8 9\xa2\x83\x88\x85@\xc5\x89\x95\xa2\xa3\xa4\x86\xa4\x95\x87@`@\xf1K\xf7K\xf2@@@@@@@@@

我想知道我的 Python 代码中缺少什么来很好地转换它,就像使用 .bat 文件一样。

我尝试用不同的方式解码它,但它从来没有给我返回任何看起来远程像正确结果的东西。我得到的最好的东西是“ISO-8859-1”解码,这导致

\x7fðñ\x7fk\x7fðððñðòù\x7fk\x7fððððððððð...

我很感激任何有关 .bat 文件工作方式不同或如何在 Python 中正确解码的建议。

非常感谢!

python ftp ftplib
1个回答
0
投票

使用

ftp
您正在使用文本/ascii 模式:

ascii

当使用 ftplib 时,您使用的是二进制模式:

ftp.retrbinary(...)

对于大多数 FTP 服务器,差异仅在于 EOL 转换。但显然你的 FTP 服务器很特别。

要在 ftplib 中使用文本/ascii 模式,请使用

FTP.retrlines

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