help () с юникодом __author__ строка - PullRequest
5 голосов
/ 16 июня 2011

В начале моих сценариев в Python 2.6 я хотел бы написать свое имя в том виде, как оно написано, то есть "Joël" (с тремой на e).Поэтому я пишу __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.py в {pythondir}\Lib\site-packages, установив кодировку по умолчанию:

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

И теперь, когда входная строка записана как u'Joël', я получаю правильный выводчерез вызов помощи ().

Проблема в том, что я вполне уверен, что это сломается на компьютерах других пользователей.Любая идея, как я мог справиться с этим?

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Вам нужно использовать простую строку, а не строку Unicode.Поэтому:

__author__ = 'Joël'

Затем отображается встроенный метод справки:

AUTHOR
    Joël

Редактировать: если это не работает, вы можете принудительно вернуть 8-битную строковую версиюсделав это:

 __author__ = u'Joël'.encode('utf-8')
1 голос
/ 16 июня 2011

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)

Маловероятно, что вы можете обойти это.

...