ошибки кодирования запуска Python изнутри bbedit - PullRequest
2 голосов
/ 12 мая 2011

Вот вопрос, который меня долго удивлял. Я использую bbedit для редактирования кода Python. Запуск кода из редактора, насколько я понимаю, порождает собственный процесс python, запускает код и записывает вывод в файл журнала. Так что bbedit не знает о переменных окружения и тому подобное. Если я попробую это в командной строке в терминале:

>>> s = 'háček'
>>> print s
háček

найди и хорошо. Но если у меня есть следующий файл в bbedit:

#!/opt/local/bin/python
# -*- coding: utf-8 -*- # 

s = u'háček'
print s

и попробуйте запустить его из редактора, который я получаю:

UnicodeEncodeError: кодек «ascii» не может кодировать символы в позиции 1-2: порядковый номер не в диапазоне (128)

поэтому я должен сделать это:

print s.encode('utf-8')

Может кто-нибудь, знакомый с bbedit, подсказать мне, что здесь происходит? Есть ли способ рассказать редактору, как вести себя при наличии символов Юникода?

Спасибо, Jon

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Если BBEdit для этого использует внешние файлы и / или перенаправление, то нет, исправить это невозможно.Исправление этого потребовало бы использования некоторых внутренних структур Python, чтобы указать ему использовать UTF-8 при кодировании вывода.

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

В маловероятном случае, когда другие столкнулись с этим, вот странный уголок знаний питона, о котором я ничего не знал:

Добрые люди из BBedit разъяснили мне это.

Определенная проблема, по-видимому, вызвана условием выполнения в bbedit, которое они не выследили, но есть обходной путь:

Python знает о специальном скрипте с именем "sitecustomize.py"

Если вы поместите следующий текст в sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')

и переместите этот файл в

/ путь / к / Python / Установка / сайт-пакеты /

Затем, когда bbedit порождает процесс python, модуль 'site' python автоматически вызывает sys.setdefaultencoding (), а затем после установки кодировки по умолчанию для сеанса (а это странный бит) удаляет setdefaultencoding из пространства имен sys. См:

http://docs.python.org/library/sys.html#sys.setdefaultencoding

...