Unsuppress UnicodeEncodeError исключения при запуске из Aptana Studio PyDev

Ниже приведен оператор, который должен вызывать исключение UnicodeEncodeError:

print 'str+{}'.format(u'unicode:\u2019')

В оболочке Python исключение создается как ожидалось:

>>> print 'str+{}'.format(u'unicode:\u2019')

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    print 'str+{}'.format(u'unicode:\u2019')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 8: ordinal not in range(128)

Однако, если я поместил эту строку в начале моего settings.py и запустил сервер Django из Aptana Studio, ошибка не будет поднята, и эта строка будет напечатана:

str+unicode:’

Но если я выполняю manage.py runserver из оболочки, возникает исключение:

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

Есть ли какой-то параметр Python, который молча подавляет эти ошибки в Юникоде?

Как я могу предотвратить игнорирование ошибки Unicode при запуске тестового сервера Django непосредственно из Aptana Studio?

Использование

  • Python 2.7.3
  • Aptana Studio 3.3.2

Ответ 1

Если вы просто нажмете bytestring на unicode, например

print unicode(s)

или смешайте unicode и bytestrings в операциях форматирования строк, подобных вашему примеру, Python вернется к системному кодированию по умолчанию (которое равно ascii, если оно не было изменено), и неявно будет пытаться кодировать unicode/decode bytestring, используя ascii кодек.

В настоящее время активная системная кодировка по умолчанию может отображаться с помощью

import sys
sys.getdefaultencoding()

Теперь кажется, что Aptana Studio на самом деле беспорядок с вашими интерпретаторами по умолчанию:

Из сообщение в блоге Микко Охтамаа:

[...] Похоже, что финалистом был PyDev (плагин Eclipse Python). мешающий исходный код здесь. Похоже, причина заключалась в сотрудничестве с консолью Eclipse. Однако это было сделано неправильно. Вместо настройки консольной кодировки, кодировка установлена ​​на всю среду исполнения Python, запуская целевое время выполнения, в котором выполняется разработка.

Существует возможное решение этой проблемы. В диалоговом окне Eclipse Run... вы можете выбрать Консольное кодирование на вкладке Обычная. Там является возможным значением US-ASCII. Я не уверен, что думает Python 2 "US-ASCII", поскольку по умолчанию " ascii".

Итак, убедитесь, что вы reset по умолчанию ascii, и вы должны быть хорошими.