我在Python 3中遇到了ftplib
模块的问题,经过一些调试后,我发现了错误:getline()
类的FTP
方法返回b'somestring'
(但作为字符串,而不是字节)而不是somestring
。我可以用.decode("utf-8")
解决这个问题,替换函数中的第一行
line = self.file.readline(self.maxline + 1)
与
line = self.file.readline(self.maxline + 1).decode("utf-8")
解决了这个错误。但是现在,我想不要手动编辑文件ftplib.py
,而是想在我的代码中覆盖它。但是,当我使用继承自FTP_TLS
的{{1}}类时,我无法弄明白,该怎么办......
FTP
我的代码开头的不起作用,因为class FTP:
def getline(self):
line = self.file.readline(self.maxline + 1).decode("utf-8")
...
无法识别我对FTP_TLS
所做的更改。
样品:
FTP
答案 0 :(得分:2)
首先,它不是ftplib
中的缺陷,它通过不假设字节流的编码来做正确的事情。在我之后重复:文件或套接字中的字节不是字符串,直到你解码它们!进一步阅读:
http://www.joelonsoftware.com/articles/Unicode.html
话虽如此,如果你仍然希望monkeypatch ftplib
假设编码总是utf-8,你可能会这样做:
from ftplib import FTP
origGetLine = FTP.getline
def assumeUtf8GetLine(*args, **kwargs):
return origGetLine(*args, **kwargs).decode('utf-8')
FTP.getline = assumeUtf8GetLine