5

在 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 -*-

知道这是从哪里来的吗?

提前感谢您的回答。


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

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

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

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

问题是,我很确定这会在其他计算机上中断。知道我该如何处理吗?

4

2 回答 2

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)

您不太可能解决此问题。

于 2011-06-16T14:22:57.200 回答
1

您需要使用简单字符串而不是 Unicode 字符串。所以:

__author__ = 'Joël'

内置的帮助方法然后显示:

AUTHOR
    Joël

编辑:如果这不起作用,那么您可以通过执行以下操作强制返回您姓名的 8 位字符串版本:

 __author__ = u'Joël'.encode('utf-8')
于 2011-06-16T14:27:32.943 回答