You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用ftplib上传含西欧字符文件到FTP后文件名乱码如何解决

问题根源

  • 你遇到的müde_Mäuschen是典型的编码错位错误:ü、ä这类西欧字符的UTF-8编码内容,被强制按照Latin-1(ISO-8859-1)解码就会生成这类乱码
  • Python标准库的ftplib默认使用Latin-1编码处理FTP命令中的文件名,而你的FTP服务器是按照UTF-8规则解析文件名的,编码规则不匹配就会出现乱码
  • FileZilla上传正常是因为它默认开启了UTF-8编码传输文件名的配置,和服务器编码规则匹配

修复方案

方案1:修改ftplib默认编码(优先推荐)

直接修改FTP实例的encoding属性为utf-8即可,和服务器编码规则对齐,修改后的代码如下:

from ftplib import FTP
import os

ftp = FTP("Login Details")
# 新增行:指定文件名使用UTF-8编码传输
ftp.encoding = "utf-8"
path = r'D:\ftp_test'
file_name = 'müde_Mäuschen.jpg'

# 推荐用os.path.join拼接路径,兼容不同系统的路径分隔符
with open(os.path.join(path, file_name), "rb") as f:
    ftp.storbinary(f"STOR {file_name}", f)

# 操作完成后关闭FTP连接
ftp.quit()

方案2:手动转码(仅方案1不生效时使用)

部分特殊场景下设置encoding属性不生效的话,可以手动对文件名做转码处理:将文件名按UTF-8编码后再按Latin-1解码,伪装成Latin-1字符串传给ftplib,服务器收到后按Latin-1解码就能还原出正确的UTF-8文件名:

file_name = 'müde_Mäuschen.jpg'
# 手动转码处理文件名
encoded_filename = file_name.encode("utf-8").decode("latin-1")
with open(os.path.join(path, file_name), "rb") as f:
    ftp.storbinary(f"STOR {encoded_filename}", f)

内容的提问来源于stack exchange,提问作者yf879

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 12:36:03