ftplib.cwd 错误:UnicodeEncodeError:'latin-1' 编解码器无法编码字符

zhi*_*ang 5 python ftp iso-8859-1 ftplib

有很多关于 'latin-1' codec 的帖子,但是这些答案并不能解决我的问题,也许是我的问题,我只是学习 Python 的菜鸟,有点。当我cwd(dirname)以前改变FTP站点的目录时,发生了unicodeerror。请注意,dirname包含中文字符,显然,这些字符会导致此错误。我按照之前帖子里的建议做了一些编码和解码,但没有奏效。有人能给我一些建议如何修复这个错误并使其cwd工作吗?

一些代码:

file = 'myhongze.jpg'
dirname = './??????/zgcao/test-python/'
site = '***.***.***.***'
user = ('zhigang',getpass('Input Pwd:'))    
ftp = FTP(site)
ftp.login(*user)            
ftp.cwd(dirname)# throw exception
Run Code Online (Sandbox Code Playgroud)

一些测试:

file = 'myhongze.jpg'
dirname = './??????/zgcao/test-python/'
site = '***.***.***.***'
user = ('zhigang',getpass('Input Pwd:'))    
ftp = FTP(site)
ftp.login(*user)            
ftp.cwd(dirname)# throw exception
Run Code Online (Sandbox Code Playgroud)

输出:

u'./??????/zgcao/test-python/'.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)
b'./\xe9\xa1\xb9\xe7\x9b\xae\xe6\x88\x90\xe5\x91\x98\xe8\xb5\x84\xe6\x96\x99/zgcao/test-python/'
Run Code Online (Sandbox Code Playgroud)

输出:

u'./??????/zgcao/test-python/'.encode('utf-8').decode('cp1252')
Run Code Online (Sandbox Code Playgroud)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 10: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

输出:

u'./??????/zgcao/test-python/'.encode('utf-8').decode('latin-1')
Run Code Online (Sandbox Code Playgroud)

值得注意的是,??????被表现为ÏîÄ¿×é³ÉԱ˽È˿ռä当我用retrlines('LIST')

小智 0

我通过编辑解决了这个问题ftplib.py。在我的机器上,它位于C:\Users\<user>\AppData\Local\Programs\Python\Python36\Lib.

你只需要替换encoding = "latin-1"encoding = "utf-8"