开发者

help() with unicode __author__ string

In the beginning of my scripts in Python 2.6, I would like to write my name as it is spelled, i.e. "Joël" (with trema on e). So I write __author__ = u'Joël', and I can retrieve it by a simple print __author__.

Problem appears with the built-in help() function, as I get an error message:

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

I cannot upgrade to Python 3.x, and I find this function very helpful (and it will surely be for those who will get my scripts). I also did not forget to encode the files in UTF-8, and to specify it in the scripts by adding this:

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

Any idea on where this comes from?

Thanks in advance for your answers.


EDIT Looking to the "Dive Into Python" book again, I found out how to have a correct render on my machine, see http://www.diveintopython.org/xml_processing/unicode.html.

The idea is that, my default encoding for Python was ASCII, and this did prevent help() to make a correct output. What I did is to add a script named like sitecustomize.py in {pythondir}\Lib\site-packages, setting the default encoding:

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

And now, with an input string written like u'Joël', I get a correct output through call of help().

Problem is, I'm quite sure that this will break on other's 开发者_运维知识库computers. Any idea how I could handle this?


Pydoc explicitly wants to convert the author name to 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)

It’s unlikely that you can work around this.


You need to use a simple string and not a Unicode string. Therefore:

__author__ = 'Joël'

The built-in help method then displays:

AUTHOR
    Joël

Edit: If this doesn't work, then you can force returning a 8-bit string version of your name by doing this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜