На моем 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. Было бы здорово узнать его мнение по этому поводу.
Наконец-то я узнал, в чем проблема. Проблема заключалась не в самих эмуляторах терминала, поскольку оба OSX Terminal
они iTerm2
использовались UTF-8
по умолчанию. Оказалось, что нужно явно сообщить python, что терминал может обрабатывать юникод с помощью
export PYTHONIOENCODING=utf-8
Кредиты на этот ответ stackoverflow.
Убедитесь, что ваш терминал в настройках iTerm -> Профили -> Терминал поддерживает Unicode (кодировка символов должна быть «Unicode (UTF-8)». SymPy выберет ASCII, если терминал не сообщает, что он поддерживает Unicode.
UTF-8
кодировка символов, но она не работает.
Асмус
асмерер
Асмус
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)
. Я могу отправить вам весь вывод ошибки, если хотите.асмерер
Асмус