我有一个请求处理ftp服务器上的文件名列表。但文件名包括亚洲字符和其他未知字符。所以我需要判断gb2312可以解码哪个文件名,可以通过iso-8859-1解码。这意味着如果使用gb2312无法获取文件名列表,那么使用iso-88591-1来获取。所以我不知道如何在ftplib
中的以下函数中编写代码def retrlines(self, cmd, callback = None):
"""Retrieve data in line mode. A new port is created for you.
Args:
cmd: A RETR, LIST, NLST, or MLSD command.
callback: An optional single parameter callable that is called
for each line with the trailing CRLF stripped.
[default: print_line()]
Returns:
The response code.
"""
if callback is None: callback = print_line
resp = self.sendcmd('TYPE A')
##################I need to update here############################
with self.transfercmd(cmd) as conn, \
conn.makefile('r', encoding='iso-8859-1') as fp:
###################################################################
while 1:
line = fp.readline()
print(line)
if self.debugging > 2: print('*retr*', repr(line))
if not line:
break
if line[-2:] == CRLF:
line = line[:-2]
elif line[-1:] == '\n':
line = line[:-1]
callback(line)
return self.voidresp()
答案 0 :(得分:0)
您没有包含太多代码,因此很难准确说明发生了什么。但作为一般规则,如果您要与之交互的数据与编码的使用不一致,则必须以二进制模式与其进行交互。
所以尽量不要传递编码。希望这会为您提供字节数据,然后您可以根据每个文件的需要进行编码/解码。