2012-11-03 27 views
0

我在32位的CentOS 5.8上使用python open()方法存在問題。當一個文件名使用ASCII之外的字符,我得到以下錯誤:在CentOS 5.8上打開的Python文件中的UnicodeEncodeError

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

出錯行是

file = open(full_path, 'w') 

代碼工作在64位的Ubuntu 12.10和64位的CentOS 6.3的罰款。

從服務器的一些信息,其中錯誤發生:

$ python --version 
Python 2.7.3 
$ cat /etc/redhat-release 
CentOS release 5.8 (Final) 
$ locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

我已經檢查了Ubuntu的機器上的「full_path」變量的類型是「統一」。部分「full_path」變量來自UTF-8格式的配置文件。其餘來自UTF-8格式的網頁。

我還沒有在CentOS 5.8機器上做任何測試,因爲它是生產服務器,我寧願不做隨機測試。任何暗示,可能是這個錯誤的原因是值得讚賞的。

更新

如果忘了提了以下工作:

$ python 
Python 2.7.3 (default, Jun 11 2012, 22:26:11) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> file = open(u'ø.txt', 'w') 
>>> 

這在我的頭應該是一樣的實際方案,但顯然事實並非如此。

更新2

現在,它適用於某些原因。該程序是一個Turbogears網絡應用程序,我剛剛啓動並停止了服務器守護程序以查看某些調試打印的結果,並且錯誤不再發生。

爲什麼會發生這種情況,我仍然處於虧損狀態,但至少問題暫時得到解決。

+0

你確定python版本在32位和64位機器上是一樣的嗎?通常,在不同的Linux架構上處理文件系統沒有區別。 –

+0

嘗試使用[codec](http://docs.python.org/2/library/codecs.html)處理文件訪問時的編碼問題。 – Drake

+0

@MartijnPieters至少它們都運行Python 2.7.3。可能有操作系統維護者補丁或特殊的編譯時間標誌,但我不知道。 – oyse

回答

0

我不確定這是否會作爲解決方案,但我有這樣的錯誤。我解決了它,但我現在有一些副作用(看我的個人資料)。 Try:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
+2

像這樣設置默認編碼僅用於掩蓋真正的潛在問題。不要這樣做。 –