mkdir_p(ftp, ftp_path)创建目录报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc5 in position 1: invalid continuation byte
时间: 2023-07-22 07:11:51 浏览: 212
ftp-server-code.rar_4 3 2 1_FTP SERVER_c 文件上传_ftp 上传
这个错误通常是因为 FTP 服务器上的目录名包含非 UTF-8 编码的字符,但 Python 默认使用 UTF-8 编码进行处理导致的。解决这个问题的方法通常有以下几种:
1. 指定正确的编码方式:你可以查看目录名的编码方式,并在创建目录时指定正确的编码方式。比如,如果目录名是 GBK 编码的,可以使用 `ftp.mkd(directory.encode('gbk'))` 指定编码方式。
2. 使用适当的解码方式:如果目录名的编码方式未知,你可以使用适当的解码方式进行尝试。例如,你可以尝试使用 `directory.decode('latin1')` 或 `directory.decode('iso8859-1')`,然后再逐步尝试其他解码方式。
以下是一个示例代码:
```
import ftplib
def mkdir_p(ftp, path):
# 递归创建 FTP 目录
dirs = path.split("/")
for dir in dirs:
try:
ftp.cwd(dir)
except:
try:
ftp.mkd(dir.encode('utf-8'))
except:
try:
ftp.mkd(dir.encode('gbk'))
except:
ftp.mkd(dir.encode('latin1'))
ftp.cwd(dir)
# 连接 FTP
ftp = ftplib.FTP('ftp.example.com')
ftp.login('username', 'password')
# 创建目录
path = u"/目录名"
try:
ftp.cwd(path) # 切换到目录,如果目录存在,则不会报错
except ftplib.error_perm:
mkdir_p(ftp, path) # 目录不存在,则递归创建路径和目录
# 关闭连接
ftp.quit()
```
上述代码中,我们在 `ftp.mkd()` 方法中指定了不同的编码方式,以尝试创建非 UTF-8 编码的目录名。如果目录名的编码方式未知,可以先尝试使用 `utf-8` 编码,然后再逐步尝试其他编码方式。
阅读全文