iTerm2, юникод и симпи

На моем Mac (OS X Mavericks) и Ubuntu я установил sympy, библиотеку Python для символьной математики. Частью этого sympyявляется красивая функциональность печати, которая использует символы Юникода для украшения символьных выражений в средах командной строки с поддержкой Юникода. Например, на моей машине с Ubuntu и на ней gnome-terminalработает следующий код

from sympy import *
x = Symbol("x")
pprint(Integral(sqrt(1/x), x)) 

оказывает на

введите описание изображения здесь

Однако та же команда в OS X с iTerm2 (которая должна поддерживать юникод) приводит к

введите описание изображения здесь

Я использую sympy 0.7.5тот, который я сделал из исходного кода с последней сборкой iTerm2(сборка 1.0.0.20140518). Есть ли что-то, что мне здесь не хватает? Ведущий разработчик sympy является одним из участников сети StackExchange. Было бы здорово узнать его мнение по этому поводу.

На данный момент запуск вашего примера через live.sympy.org выдает много ошибок юникода - может быть, это общая проблема с самой последней сборкой?
@Asmus, что вы имеете в виду, ошибки Unicode? Если он отображается неправильно, это проблема вашего браузера или шрифта, который он использует.
@asmeurer Я попытался скопировать и вставить три строки Python непосредственно в сеанс браузера (Safari) и получил следующий результат: Exception in SymPy Live of type <type 'exceptions.UnicodeEncodeError'>[. . . ] UnicodeEncodeError: 'ascii' codec can't encode character u'\u2320' in position 0: ordinal not in range(128). Я могу отправить вам весь вывод ошибки, если хотите.
@Asmus, если бы вы могли открыть для него проблему , это было бы здорово. Я не могу воспроизвести его сам.
@asmeurer Теперь проблему можно найти здесь

Ответы (2)

Наконец-то я узнал, в чем проблема. Проблема заключалась не в самих эмуляторах терминала, поскольку оба OSX Terminalони iTerm2использовались UTF-8по умолчанию. Оказалось, что нужно явно сообщить python, что терминал может обрабатывать юникод с помощью

export PYTHONIOENCODING=utf-8

Кредиты на этот ответ stackoverflow.

Интересно, я никогда не слышал об этой переменной среды. Интересно, с этой ситуацией лучше справляется Python 3.
Это не сработало для меня. Даже попробовал Python 3 в надежде, что он может просто работать, но это не сработало.

Убедитесь, что ваш терминал в настройках iTerm -> Профили -> Терминал поддерживает Unicode (кодировка символов должна быть «Unicode (UTF-8)». SymPy выберет ASCII, если терминал не сообщает, что он поддерживает Unicode.

Спасибо за ответ. Боюсь, проблема не в этом. И в iTerm2, и в терминале у меня есть UTF-8кодировка символов, но она не работает.