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. vs2008生成的各种文件

    一.sln文件     .sln(Solution)解决方案文件,表示一个项目组,他通常包含一个项目中所有的工程文件信息.   二.suo文件     suo(Solution User Option ...

  2. Codeforces Round #206 (Div. 2)

    只会做三个题: A:简单题,不解释: #include<cstdio> using namespace std; int k,d; int main() { scanf("%d% ...

  3. 使用HttpServletRequestWrapper在filter修改request参数

    javax.servlet.ServletRequest中的 Map<String, String[]> parameterMap = request.getParameterMap(); ...

  4. Linux下查看CPU信息

    在linux操作系统中,CPU的信息在启动的过程中被装载到虚拟目录/proc下的cpuinfo文件中,我们可以通过 cat /proc/cpuinfo 查看一下:

  5. solrnet - document

      Overview and basic usage Mapping Initialization Create/Update/Delete Querying Faceting Highlightin ...

  6. ServiceStack.Redis常用操作 - 事务、并发锁

    一.事务 使用IRedisClient执行事务示例: using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("key&q ...

  7. asp.net生成二维码的方法

    asp.net生成二维码的方法 [复制链接]     这个要利用一个Dll文件. 如下 Gma.QrCodeNet.Encoding.dll (105.5 KB, 下载次数: 27) 当然大家也可以直 ...

  8. yarn的初步理解

    查考site: http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-site/YARN.html yarn结构图如下: 1.yar ...

  9. Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset

    1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 891  Solved: 590 ...

  10. MySQL生僻字(不常用字)的完整解决方案

    查看 MySQL 数据库服务器和数据库字符集 show variables like '%char%'; 查看 MySQL 数据表(table) 的字符集 show table status from ...