help()与unicode __author__字符串

时间:2011-06-16 14:21:21

标签: python character-encoding author pydoc

在我的Python 2.6脚本的开头,我想写下我的名字拼写,即“Joël”(与e上的trema)。所以我写__author__ = u'Joël',我可以通过一个简单的print __author__来检索它。

内置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 -*-

关于它来自哪里的任何想法?

提前感谢您的回答。


EDIT 再次关注“Dive Into Python”一书,我发现了如何在我的机器上进行正确的渲染,请参阅http://www.diveintopython.org/xml_processing/unicode.html

我的想法是,我的Python默认编码是ASCII,这确实阻止了help()产生正确的输出。我所做的是在sitecustomize.py中添加一个名为{pythondir}\Lib\site-packages的脚本,设置默认编码:

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

现在,使用类似u'Joël'的输入字符串,通过调用help()得到正确的输出。

问题是,我很确定这会破坏其他人的计算机。知道如何处理这个问题吗?

2 个答案:

答案 0 :(得分: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)

你不太可能解决这个问题。

答案 1 :(得分:1)

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

__author__ = 'Joël'

然后显示内置帮助方法:

AUTHOR
    Joël

编辑:如果这不起作用,那么你可以通过这样做强制返回你的名字的8位字符串版本:

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