我一直在阅读左右和中心关于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”和所有键入它的工作原理。有人可以向我解释为什么会发生这种情况/如何解决这个问题?
谢谢
我没有意识到的是,os.path.walk传递给定函数编码的字符串。在行走功能开始时,一个快速的.decode('latin1')解决了我的问题。谢谢! – chnaideur 2011-04-27 00:07:28