Python的Ftplib问题:UnicodeEncodeError: 'latin-1' codec can't encode characters的解决方法
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的解决方法的更多相关文章
- Python 排错UnicodeEncodeError 'ascii' codec can't encode character 错误解决方法
Python UnicodeEncodeError 'ascii' codec can't encode character 错误解决方法 by:授客 QQ:1033553122 错误描述: py ...
- 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 ...
- 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- ...
- 解决python编码问题报错:'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
这个问题很奇怪,在服务器上执行一个写数据库的python文件,正常执行,但是使用java的ssh进行调用脚本,发现就是不执行数据库的写入,然后使用了try except的方式,打印了错误信息,发现报错 ...
- UnicodeEncodeError: 'ascii' codec can't encode character...的解决方法
在python2.7下,因为想从数据库中读出来分类名进行写入到文件,提示 Traceback (most recent call last): File "test.py", li ...
- 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 ...
- 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 ...
- 【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 ...
- 【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 ...
随机推荐
- nodejs广播
http://site.douban.com/185124/widget/notes/10805558/note/240909343/ http://t42dw.iteye.com/blog/1767 ...
- java + spring (jython\python\script) Error:SyntaxError: no viable alternative at character '\n'
使用Jython结合java和Python开发功能时,要是遇到如下情况: 2016-03-10 16:16:49 DEBUG [com.freedom.orion.configs.JyhtonConf ...
- Delphi_OD_代码_调试_Delphi反调试技术(以OD为例附核心原代码)
1.程序窗口[chuang kou]句柄[ju bing]检测原理:用FindWindow函数[han shu]查找[cha zhao]具有相同窗口[chuang kou]类名和标题的窗口[chuan ...
- 14.6.3.3 Making the Buffer Pool Scan Resistant
14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...
- Solr -- Solr Facet 2
solr将以导航为目的的查询结果称为facet. 它并不会修改查询结果信息, 只是在查询结果上根据分类添加了count信息, 然后用户根据count信息做进一步的查询, 比如淘宝的查询列表中, 上面会 ...
- Camus导入中文乱码问题(源码修改、编译、部署、任务启动)
Camus使用过程中业务方反映从Kafka导入至HDFS中的数据有中文乱码问题,且业务方确认写入的数据编码为UTF-8,开始跟进. 问题重现: (1)编写代码将带有中文的字符串以编码UTF-8 ...
- 【转】Log4cpp 封装
[转自]http://blog.csdn.net/ylioi/article/details/9049591 这篇文章对Log4cpp使用了宏定义和类进行封装,非常有借鉴意义. log4cpp 是参考 ...
- java基础(十三)常用类总结(三)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- 【索引】Objective-C基础教程-读书笔记
第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章 面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...
- ACM1024动态规划
#include <cstdio> #include <algorithm> #define FI(a, b, c) for(int a = (b); a <= (c); ...