标准Python库和Unicode

时间:2011-04-26 08:25:09

标签: python unicode

我一直在左右阅读关于unicode和python的中心。我想我理解编码/解码是什么,但只要我尝试使用标准库方法操作文件名,我就会臭名昭着:

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

在这种情况下\ xe9代表'é',如果我从os.path.join()或shutil.copy()调用它并不重要,它会抛出相同的错误。据我所知,它与python的默认编码有关。我试着改变它:

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

没有任何改变。如果我输入:

sys.setdefaultencoding('utf-8')
它告诉我:

ImportError: cannot import name setdefaultencoding

我真正不明白的是当我在终端输入'xe9'时它为什么会有效。有人可以向我解释为什么会发生这种情况/如何绕过它?

谢谢

3 个答案:

答案 0 :(得分:2)

* nix上的文件名不能被操作为unicode。必须对文件名进行编码以匹配the charset of the filesystem然后使用。

答案 1 :(得分:1)

你应该在 os.path.join

之前用正确的编码手动解码文件名(latin1?)

btw:# - - 编码:utf-8 - - 引用.py文件中的字符串文字

effbot有一些好的信息

答案 2 :(得分:1)

您不应触摸默认编码。这是最好的做法,强烈推荐使用'ascii'并将数据正确转换为输出端的utf-8。