iTerm2, Unicode und Sympy

Auf meinem Mac (OS X Mavericks) und meinem Ubuntu-Computer habe ich Sympy installiert, eine Python-Bibliothek für symbolische Mathematik. Ein Teil davon sympyist die hübsche Druckfunktion, die Unicode-Zeichen verwendet, um symbolische Ausdrücke in den Befehlszeilenumgebungen mit Unicode-Unterstützung zu verschönern. Zum Beispiel auf meinem Ubuntu-Rechner und auf ihm gnome-terminalläuft der folgende Code

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

macht zu

Geben Sie hier die Bildbeschreibung ein

Der gleiche Befehl in OS X mit iTerm2 (das Unicode unterstützen sollte) führt jedoch zu

Geben Sie hier die Bildbeschreibung ein

Ich verwende sympy 0.7.5das, was ich aus dem Quellcode mit dem neuesten Build von iTerm2(Build 1.0.0.20140518) erstellt habe. Gibt es etwas, das ich hier vermisse? Der Hauptentwickler von sympy ist einer des StackExchange-Netzwerks. Es wäre toll, seine Meinung dazu zu erfahren.

In diesem Moment wirft das Ausführen Ihres Beispiels über live.sympy.org viele Unicode-Fehler - vielleicht gibt es ein allgemeines Problem mit dem neuesten Build?
@Asmus was meinst du mit Unicode-Fehlern? Wenn es nicht korrekt dargestellt wird, liegt ein Problem mit Ihrem Browser oder der verwendeten Schriftart vor.
@asmeurer Ich habe versucht, die drei obigen Python-Zeilen direkt in die Browsersitzung (Safari) zu kopieren und einzufügen, und hatte die folgende Ausgabe: 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). Ich kann Ihnen die gesamte Fehlerausgabe senden, wenn Sie möchten.
@Asmus, wenn du ein Problem dafür eröffnen könntest , wäre das großartig. Ich kann es selbst nicht reproduzieren.
@asmeurer Die Ausgabe ist jetzt hier zu finden

Antworten (2)

Ich habe endlich herausgefunden, was das Problem ist. Das Problem lag nicht bei den Terminalemulatoren selbst, da beide OSX Terminalund standardmäßig iTerm2verwendet wurden. UTF-8Es stellte sich heraus, dass man Python explizit mitteilen muss, dass das Terminal unicodefähig ist

export PYTHONIOENCODING=utf-8

Credits für diese Stackoverflow-Antwort.

Interessant, ich habe noch nie von dieser Umgebungsvariable gehört. Ich frage mich, ob dies eine Situation ist, die von Python 3 besser gehandhabt wird.
Das hat bei mir nicht funktioniert. Ich habe sogar Python 3 in der Hoffnung ausprobiert, dass es vielleicht funktioniert, aber es hat nicht funktioniert.

Stellen Sie sicher, dass Ihr Terminal in den iTerm-Einstellungen -> Profile -> Terminal Unicode unterstützt (die Zeichenkodierung sollte "Unicode (UTF-8)" sein). SymPy wählt ASCII, wenn das Terminal nicht meldet, dass es Unicode unterstützt.

Danke für deine Antwort. Ich fürchte, das ist nicht das Problem. Sowohl in iTerm2 als auch in Terminal habe ich eine UTF-8Zeichencodierung und es funktioniert dennoch nicht.