Python3 ftplib 打印目录出现乱码问题如何解决
在 windows 上
Python3 ftplib 打印目录出现乱码问题如何解决
1 回复
用 ftplib 打印中文目录乱码,通常是服务器编码和本地解码不匹配。FTP协议本身不规定编码,中文Windows服务器常用GBK,Linux/Unix常用UTF-8。
核心解决方案是正确解码 retrlines 或 nlst 返回的字节数据。
这里给你两个最实用的方法:
方法1:修改 ftplib 的默认编码(推荐,一劳永逸)
在创建 FTP 对象后,直接修改其编码属性。这会让后续所有目录列表操作都使用指定编码。
from ftplib import FTP
# 连接到FTP服务器
ftp = FTP('your.ftp.server')
ftp.login('username', 'password')
# 关键步骤:设置编码。尝试 'gbk' 或 'utf-8'
ftp.encoding = 'gbk' # 对于中文Windows服务器通常有效
# 现在打印目录
ftp.dir()
# 或者使用 nlst()
file_list = ftp.nlst()
for f in file_list:
print(f)
方法2:手动解码字节数据
如果方法1不奏效,或者你需要更精细的控制,可以直接获取原始字节流并解码。
from ftplib import FTP
ftp = FTP('your.ftp.server')
ftp.login('username', 'password')
# 使用 retrbinary 或 retrlines 获取原始数据
lines = []
ftp.retrlines('LIST', lambda x: lines.append(x.encode('latin-1'))) # 先按latin-1转回字节
# 尝试用正确的编码解码
for line_bytes in lines:
try:
# 先尝试utf-8
print(line_bytes.decode('utf-8'))
except UnicodeDecodeError:
# 如果utf-8失败,尝试gbk
print(line_bytes.decode('gbk'))
如何确定服务器编码?
- 试错法:依次尝试
ftp.encoding = 'gbk'、'gb2312'、'utf-8'。 - 看服务器:如果服务器是中文Windows,极大概率是
GBK;现代Linux/Unix服务器通常是UTF-8。 - 用命令行测试:先用系统的FTP客户端连上去,看显示是否正常。
总结:先设 ftp.encoding = 'gbk' 试试。

