2011-04-26 71 views
0

我一直在阅读左右和中心关于unicode和python。我想我明白编码/解码是什么,但只要我尝试使用标准库的方法操作文件的名称,我得到了臭名昭著:标准Python库和Unicode

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 19: 
ordinal not in range(128) 

在这种情况下\ xe9代表“E”,如果我从os.path.join()或shutil.copy()调用它,则无关紧要,它会引发相同的错误。据我所知,它与python的默认编码有关。我试着改变它:

# -*- coding: utf-8 -*- 

没有什么变化。如果键入:

sys.setdefaultencoding('utf-8') 

它告诉我:

ImportError: cannot import name setdefaultencoding 

我真的不明白的是,为什么当我在终端上,“\ xe9”和所有键入它的工作原理。有人可以向我解释为什么会发生这种情况/如何解决这个问题?

谢谢

回答

1

你应该手动解码之前 os.path.join

者均基于与正确的编码(LATIN1?)文件名:# - - 编码:UTF-8 - - 是指在字符串文字你的.py文件

effbot有一些很好的相关信息

+0

我没有意识到的是,os.path.walk传递给定函数编码的字符串。在行走功能开始时,一个快速的.decode('latin1')解决了我的问题。谢谢! – chnaideur 2011-04-27 00:07:28

1

你不应该碰的默认编码。最好的做法是,强烈建议使用'ascii'并在输出端正确地将数据转换为utf-8。