ftplib中有一个方法是cwd,用来切换目录,需要传入一个dirname,经过个人测试,该dirname不能含有汉字,会抛出:UnicodeEncodeError: 'latin-1' codec can't encode characters 类型的错误。

在google中搜索,stackflow网站有大量类似的问题和解决方法,常见的是因为utf-8和latin-1无法一一对应,一般将字符串encode为utf-8而后decode为cp1252的方案来解决,但是我按照这种方法来做,却无法解决cwd的错误问题(dirname.encode().decode('cp1252')).我相信利用编码的转化是可以解决的,但是我还没有找到。如果有哪位前辈知道如何解决,望请指导告知,谢谢!

而后,利用了一个笨的方法去改变,即:首先正常的ftp.login,然后 利用retrlines('LIST') 方法列出目录,手动复制汉字编码转换后的目录,而后将其作为dirname的值传入到cwd中,由此完成切换目录的工作。如果有人遇到同样的问题,也许可以尝试。

from ftplib import FTP
from os.path import exists
from getpass import getpass
#getpass是弹出一个输入密码的窗口 def getfile(file,site,dirname,usr=(),*,verbose = True,refetch = False):
if exists(file) and not refetch:
if verbose:print(file,' already feteched.')
else:
if verbose:print('Downloading... ',file)
local = open(file,'wb')
try:
ftp = FTP(site)
ftp.login(*user)
ftp.cwd(dirname)
print('Current directory:',ftp.pwd())
ftp.retrlines('LIST')
ftp.retrbinary('RETR '+file,local.write,1024)
ftp.quit()
finally:
local.close()
if verbose: print('Download Done!') if __name__=='__main__': file = 'myhongze.jpg'
dirname = './ÏîÄ¿×é³ÉԱ˽È˿ռä/zgcao/test-python/'
site = '************'
user = ('zhigang',getpass('Input Pwd:'))
getfile(file,site,dirname,user,refetch=True)
#在dirnmae直接输入汉字的时候会出现问题,会爆出“UnicodeEncodeError: 'latin-1' codec can't encode characters”的错误,这个查询主要是编码的问题,decode为cp1252和latin-1都
#无法解决,最后利用ftp.retrlines('LIST')列出汉字的目录,然后复制附录,最后进行处理。

Python的Ftplib问题:UnicodeEncodeError: 'latin-1' codec can't encode characters的解决方法的更多相关文章

  1. Python 排错UnicodeEncodeError 'ascii' codec can't encode character 错误解决方法

    Python UnicodeEncodeError 'ascii' codec can't encode character 错误解决方法   by:授客 QQ:1033553122 错误描述: py ...

  2. UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

    Scrapy爬虫向数据库写入数据时报错: UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-1: ord ...

  3. UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256) Scrapy

    1.使用scrapy对数据进行入库时,出现如下错误: UnicodeEncodeError:'latin-1' codec can't encode characters in position 0- ...

  4. 解决python编码问题报错:'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)

    这个问题很奇怪,在服务器上执行一个写数据库的python文件,正常执行,但是使用java的ssh进行调用脚本,发现就是不执行数据库的写入,然后使用了try except的方式,打印了错误信息,发现报错 ...

  5. UnicodeEncodeError: 'ascii' codec can't encode character...的解决方法

    在python2.7下,因为想从数据库中读出来分类名进行写入到文件,提示 Traceback (most recent call last): File "test.py", li ...

  6. Python编码问题:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(12

    今天安装了PyScripter编辑器,刚要写代码,突然就出现异常: <span style="font-size:14px;color:#ff0000;">>&g ...

  7. python+selenium运行报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in posi ...

  8. 【Python】【BugList12】python自带IDLE执行print(req.text)报错:UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 93204-93204

    [代码] # -*- coding:UTF-8 -*- import requests if __name__ == '__main__': target = 'https://unsplash.co ...

  9. 【python问题】UnicodeEncodeError: 'ascii' codec can't encode characters in position 306-309: ordinal not in range(128)

    今天在写python爬虫的时候,遇到一个问题 UnicodeEncodeError: 'ascii' codec can't encode characters in position 306-309 ...

随机推荐

  1. C#委托(Delegate)学习日记

    在.NET平台下,委托类型用来定义和响应应用程序中的回调.事实上,.NET委托类型是一个类型安全的对象,指向可以以后调用的其他方法.和传统的C++函数指针不同,.NET委托是内置支持多路广播和异步方法 ...

  2. OGNL-action

    需要注意的是,action需要先被调用到,OGNL才能成功,因为action被执行才被压入值栈 package com.wolfgang.action; import com.opensymphony ...

  3. 一个短路求值引起的一个小bug

    今天在写一个判断字符串是否回文时因为短路求值问题导致了一个bug,记录如下: 代码如下 bool isPal(char str[],int len) { int begin=0; int end=le ...

  4. 2016 年开发者应该掌握的十个 Postgres 技巧

    [编者按]作为一款开源的对象-关系数据库,Postgres 一直得到许多开发者喜爱.近日,Postgres 正式发布了9.5版本,该版本进行了大量的修复和功能改进.而本文将分享10个 Postgres ...

  5. c++ RTTI(runtime type info)

    RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作符: ...

  6. 使用bacula实现Linux的远程备份和还原

    Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作.Bacula,既有windows版本的,也有Linux,U ...

  7. (转载)函数:mysqli_query和mysql_query有何区别?

    (转载)http://wzan315.blog.163.com/blog/static/37192636201241732045299/ Mysqli.dll是一个允许以对象的方式或者过程操作数据库的 ...

  8. Just a Hook

      Just a Hook 题目大意:原来有N个铜棍, 一个人有种能力可以把一个区间的棍变成铜,银或者金的,价值分别是1,2,3, 最后求出总价值,没啥好说的,赤裸裸的线段树: Time Limit ...

  9. 常用shell变量$#,$@,$0,$1,$2等

    常用shell变量$#,$@,$0,$1,$2的含义解释: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返 ...

  10. [转]C++ map容器用法

    C++ map的基本操作和使用 原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关 ...