当我使用ftplib下载时,我对北欧角色'æøå'有一个奇怪的问题。
使用这部分代码时:
source_file = 'file_w_æøå.zip'
ftp.retrbinary('RETR %s' % source_file, open(local_file, 'wb').write)
我收到此错误:
return getattr(self._sock,name)(*args)
UnicodeEncodeError: 'ascii' codec can't encode characters u'\xe6' in position 12-14: ordinal not in range(128)
有趣的是,如果我用这样的真实值替换字符串:
ftp.retrbinary('RETR %s' % 'file_w_æøå.zip', open(local_file, 'wb').write)
文件下载没有问题?!
我用utf-8尝试解码/编码几乎所有东西,我只是缺少尝试正确的东西:)
希望你们能帮忙:)。
PS在local_file变量中使用特殊字符时,它可以解决错误。
完整的代码添加,而不是图片完美,仍然是newbi:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import ConfigParser
import ftplib
import codecs
sysCodec = sys.getfilesystemencoding()
print('sysCodec: %s' % sysCodec)
# Get the argument (a) Section in config file
extract_conf = sys.argv[1]
configParser = ConfigParser.SafeConfigParser()
configFilePath = r'C:\\FTP_DL\\config.ini'
configParser.read(configFilePath)
#set variable from Config file
try:
host = configParser.get(extract_conf, 'url')
#print('Host %s' % host)
user = configParser.get(extract_conf, 'user')
#print('User %s' % user)
pw = configParser.get(extract_conf, 'pw')
#print('PW %s' % pw)
ftp_dir = configParser.get(extract_conf, 'ftp_dir').decode('utf-8')
print('FTP_DIR: %s' % ftp_dir)
dest_dir = configParser.get(extract_conf, 'dest_dir').decode('utf-8')
print('DEST_DIR: %s' % dest_dir)
dest_file = configParser.get(extract_conf, 'dest_file').decode('utf-8')
print('DEST_FILE: %s' % dest_file)
source_file = configParser.get(extract_conf, 'source_file').decode('utf-8')
print('SOURCE_FILE: %s' % source_file)
local_file = os.path.join(dest_dir, dest_file)
print('Local_File: %s' % local_file)
except 'NoSectionError':
print ('Section %s not found' % extract_conf)
sys.exit()
ftp = ftplib.FTP(host)
ftp.login(user,pw)
ftp.cwd(ftp_dir)
ftp.retrbinary(retr, open(local_file, 'wb').write)
ftp.quit()