2011-06-16 96 views
4

在我的Python 2.6腳本的開頭,我想寫下我的名字,因爲它是拼寫的,即「Joël」(帶有trema on e)。所以我寫__author__ = u'Joël',我可以通過一個簡單的print __author__檢索它。help()with unicode __author__ string

問題似乎與內置help()功能,因爲我得到一個錯誤信息:

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

我不能升級到Python 3.x的,我覺得這個功能非常有用(這將肯定是爲那些誰將得到我的腳本)。我也沒有忘記將文件編碼爲UTF-8,並通過將該腳本中的指定它:

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

在哪裏這是來自任何想法?

在此先感謝您的答案。


編輯 展望「深入Python」的書,我再次發現瞭如何有一個正確的呈現在我的機器上,看到http://www.diveintopython.org/xml_processing/unicode.html

這個想法是,我對Python的默認編碼是ASCII,並且這確實阻止了help()生成正確的輸出。我所做的就是添加一個名爲像{pythondir}\Lib\site-packagessitecustomize.py腳本,設置默認編碼:

import sys 
sys.setdefaultencoding('iso-8859-1') 

而現在,這樣寫u'Joël'輸入字符串,我得到一個正確的輸出通過幫助()調用。

問題是,我很確定這會在其他電腦上打破。任何想法如何我可以處理這個?

回答

1

是pydoc明確希望作者的名字轉換爲ASCII:

File "/usr/local/Cellar/python/2.7.1/lib/python2.7/pydoc.py", line 1111, in docmodule 
    result = result + self.section('AUTHOR', str(object.__author__)) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xeb' in position 2: ordinal not in range(128) 

這是不可能的,你可以解決這個問題。

+0

當然可以。用一個自定義的'__str __()'方法替換它。 – 2011-06-16 14:29:23

+0

我只是想試試這個,但是我不知道在這個'__str __()'方法裏面放什麼東西。我的意思是,在這裏進行一些編碼轉換,例如爲了消除重音,看起來就像從一開始就寫出沒有口音的名字一樣,因爲任何'print'都會調用它。或者,我應該看到如何根據調用函數來更改輸出......不確定這是否合法。 – 2011-06-16 14:58:22

+0

@Ignacio無論如何它都需要一個字節串。而'sys.getdefaultencoding'無用地說''ascii''。 – 2011-06-16 15:02:44

1

您需要使用簡單的字符串而不是Unicode字符串。因此:

__author__ = 'Joël' 

內置的幫助方法,然後顯示:

AUTHOR 
    Joël 

編輯:如果這不起作用,那麼你可以強制做回你的名字的8位字符串版本這個:

__author__ = u'Joël'.encode('utf-8') 
+6

我擔心這不會跨平臺,因爲它取決於平臺的默認編碼。 – 2011-06-16 14:29:41

+0

好主意,我以前沒有嘗試過。唉,它的效果不如我想要的那樣好:在我自己的IDLE計算機上,以UTF-8配置,我得到了「Joël」。奇怪的。如果我回到顯式unicode字符串,除了help()外,沒有任何問題。 – 2011-06-16 14:37:50