2011-04-26 102 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。