Python3 ftplib 打印目录出现乱码问题如何解决

在 windows 上


Python3 ftplib 打印目录出现乱码问题如何解决
1 回复

ftplib 打印中文目录乱码,通常是服务器编码和本地解码不匹配。FTP协议本身不规定编码,中文Windows服务器常用GBK,Linux/Unix常用UTF-8。

核心解决方案是正确解码 retrlinesnlst 返回的字节数据。

这里给你两个最实用的方法:

方法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'))

如何确定服务器编码?

  1. 试错法:依次尝试 ftp.encoding = 'gbk''gb2312''utf-8'
  2. 看服务器:如果服务器是中文Windows,极大概率是 GBK;现代Linux/Unix服务器通常是 UTF-8
  3. 用命令行测试:先用系统的FTP客户端连上去,看显示是否正常。

总结:先设 ftp.encoding = 'gbk' 试试。

回到顶部