ftplib的源文件中,默认编码是encoding = "latin-1",而我们正常显示的编码可能是gbk,由于编码的不同,会导致查询返回来的文件名不正确。比如这样:
这就是编码问题造成的。解决方法也很简单,
list = ftp.dir()
ll = list[4].encode(encoding='latin-1').decode(encoding='gbk'
remote_path = '/' + list[4].split(' ')[-1]
print(remote_path)
ftp.cwd(remote_path) # 设置FTP远程目录(路径)
list1 = ftp.nlst()
#print(list1[0])
#print(list1[1])
file1 = list1[0].encode(encoding='latin-1').decode(encoding='gbk')
file2 = list1[1].encode(encoding='latin-1').decode(encoding='gbk')
把‘latin-1’编码文件名,按gbk格式解码,encode和decode是字符串的两个方法,分别是编码,和解码,解码后就可以正常显示文件名:
知道这个原因,就可以下载文件了,比如:
list = ftp.dir()
虽然返回的值不能识别,但是在远端,latin-1编码下,他是正确的,list的最后列为文件夹名,list[4].split(' ')[-1]就可以返回正确的文件名,如果需要电脑正确显示,就需要编码,再解码。
remote_path = '/' + list[4].split(' ')[-1]
print(remote_path)
ftp.cwd(remote_path) # 设置FTP远程目录(路径)
远端切换到相应路径下面,给出正确的文件名,就可以下载文件了。
list1 = ftp.nlst()
返回路径下的文件列表,按需要下载就可,下载过程如果要提示正确文字,就是编码--解码,或解码--编码就可以了。
希望我的记录给你有帮助。