2011-06-16 58 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