Python:用UTF-8读取Ftp文件列表?

Bus*_*ken 8 python ftp utf-8 ftplib python-3.x

嗨,我正在使用模块ftplib.并使用以下代码列出我的文件:

files=[]
files = ftp.nlst()
Run Code Online (Sandbox Code Playgroud)

并使用以下代码将它们写入文本文件:

for item in files:
    filenames.write(item +'\n')
Run Code Online (Sandbox Code Playgroud)

但是有一个编码问题,如果我的文件名有'ı,ğ,ş'字符,它无法读取这个并写入文件'?' 代替.

如何正确阅读?

小智 9

Python 3.x使用默认编码ISO-8859-1作为文件名.

要将UTF-8编码用于服务器的文件名,您需要添加以下行:

ftpConnector = ftplib.FTP(host,user,password) # connection

ftpConnector.encoding='utf-8' #force encoding for file name in utf-8 rather than default that is iso-8889-1
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

ftpConnector.storbinary( 'STOR '+fileName, file) # filename will be utf-8 encoded
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 0

在将项目写入文件之前,您需要将结果项目转换回 unicode。ftp 模块不支持 unicode 字符串。要执行此操作,请尝试:

import encodings.idna

for item in files:
    filenames.write(encodings.idna.ToUnicode(item) + '\n')
Run Code Online (Sandbox Code Playgroud)