我一直在左右阅读关于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'时它为什么会有效。有人可以向我解释为什么会发生这种情况/如何绕过它?
谢谢
答案 0 :(得分:2)
* nix上的文件名不能被操作为unicode
。必须对文件名进行编码以匹配the charset of the filesystem然后使用。
答案 1 :(得分:1)
答案 2 :(得分:1)
您不应触摸默认编码。这是最好的做法,强烈推荐使用'ascii'并将数据正确转换为输出端的utf-8。