python ftplibretrbinaryæøå

时间:2017-09-15 11:36:40

标签: python special-characters ftplib

当我使用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()  

0 个答案:

没有答案