Seite 1 von 1

IPython + Unicode

Verfasst: Mittwoch 10. Dezember 2008, 06:28
von Pekh
Ohne große Worte:

Code: Alles auswählen

In [1]: a = u"ä"

In [2]: a
Out[2]: u'\xc3\xa4'
Die Beobachtung stammt von einem komplett auf utf-8 laufenden Linuxsystem, ich habe es aber auch schon unter Windows mit cp850 beobachtet. Die "normale" Pythonshell macht es richtig.
Eine kurze Suche bei Google ergab keine Lösung, aber offenbar haben noch mehr Leute dieses Problem.
Nun nutzen ja einige Leute hier im Forum ipython, weshalb ich annehme, daß das Problem bei diesen irgendwie gelöst wurde. Kann mir jemand mal einen Tip geben?

Verfasst: Mittwoch 10. Dezember 2008, 10:28
von Darii
Du hast, es richtig erkannt. UTF-8.

Code: Alles auswählen

In [1]: a = "ä".decode("utf-8")

In [2]: a

Out[2]: u'\xe4'

In [3]: 
Aber das ist natürlich nur ein Workaround.

Verfasst: Mittwoch 10. Dezember 2008, 10:39
von Pekh
So weit war ich leider auch schon. Aber wenn ich in der Shell etwas ausprobiere möchte ich eigentlich nicht jeden einzelnen String dekodieren. Das nimmt dem "schnell mal ausprobieren" irgendwie die Schnelligkeit.

Trotzdem danke für deine Antwort.

Verfasst: Mittwoch 10. Dezember 2008, 11:09
von BlackJack
Es wird Dir wahrscheinlich nicht weiterhelfen, aber ich kann's nicht nachvollziehen:

Code: Alles auswählen

In [229]: u'ä'
Out[229]: u'\xe4'

In [230]: 'ä'
Out[230]: '\xc3\xa4'
Ebenfalls auf einem Linux-System mit UTF-8 als "locale"-Kodierung.

Verfasst: Mittwoch 10. Dezember 2008, 16:39
von lunar

Code: Alles auswählen

[1]--> u'ä'
Out[1]: u'\xc3\xa4'
Same problem ... auf einem Gentoo-System.

Verfasst: Mittwoch 10. Dezember 2008, 16:52
von BlackVivi

Code: Alles auswählen

Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.8.1 -- An enhanced Interactive Python.

In [1]: u"ä"
Out[1]: u'\xe4'

In [2]: "ä"
Out[2]: '\xc3\xa4'
Windows XP, SP3.

Verfasst: Mittwoch 10. Dezember 2008, 17:38
von Pekh
lunar hat geschrieben:

Code: Alles auswählen

[1]--> u'ä'
Out[1]: u'\xc3\xa4'
Same problem ... auf einem Gentoo-System.
Hm. Hier läuft ebenfalls Gentoo. Wäre ne Überlegung, ob von der Seite her vielleicht was falsch läuft. WinXP in Virtualbox (und dann unter Gentoo) liefert das Problem aber auch. "Reines" XP habe ich noch nicht testen können.

Verfasst: Mittwoch 10. Dezember 2008, 17:41
von cofi

Code: Alles auswählen

In [41]: "ä"
Out[41]: '\xc3\xa4'

In [42]: u"ä"
Out[42]: u'\xc3\xa4'
Auf einem Gentoo System mit LC_ALL= de_DE.utf8

Verfasst: Mittwoch 10. Dezember 2008, 18:03
von gkuhl

Code: Alles auswählen

Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.1 -- An enhanced Interactive Python.
In [1]: a = u'ä'

In [2]: a
Out[2]: u'\xe4'

In [3]: print a
ä
auf Kubuntu 8.04 mit en_GB.UTF-8. Funktioniert mit (nur) Python2.5 ebenfalls nicht. Die Ausgabe von "print" ist aber korrekt.

Verfasst: Mittwoch 10. Dezember 2008, 18:45
von Pekh
cofi hat geschrieben:

Code: Alles auswählen

In [41]: "ä"
Out[41]: '\xc3\xa4'

In [42]: u"ä"
Out[42]: u'\xc3\xa4'
Auf einem Gentoo System mit LC_ALL= de_DE.utf8
Zeichnet sich da was ab? Hab de_DE.utf8 und en_US.utf8 im Einsatz.

Verfasst: Mittwoch 10. Dezember 2008, 19:55
von lunar
Dito ... allerdings habe ich zusätzlich noch die ISO-Varianten.

Es ist aber auch nicht so, dass dieses Problem neu wäre ... der Report auf der alten Trac-Seite ist mal eben so neun Monate alt und offenbar unbeachtet geblieben :|

Ein weiterer Report beschreibt das gleiche Problem, und nennt es "fixed", was aber offensichtlich nicht der Fall ist.

Dazu gab es auch ne Diskussion auf der Mailingliste, in der Entwickler von IPython Fernando Perez (zumindest glaube ich, dass er ein Entwickler ist) zugibt, von Unicode nicht allzu viel Ahnung zu haben.

Neueres zu dem Thema habe ich nicht finden können. Wie dem auch sei, gelöst ist da ja offenbar nichts.

Ich hab mal an die ipython-dev Liste geschrieben ...

Verfasst: Mittwoch 10. Dezember 2008, 20:00
von Pekh
Gut, dann muß ich nicht mehr schreiben :) Interessant finde ich aber, daß es z.B. bei Blackjack ja zu funktionieren scheint. Ist es denkbar, daß IPython irgendeine Einstellung verwendet, die unter Gentoo anders gehandhabt wird als unter anderen Distris?

Edit: Dieser Patch, den jemand mal eingereicht hat ... könnte es sein, daß der aus irgendwelchen Gründen in den Sourcen, die vom Gentoo-Ebuild verwendet werden, nicht (mehr) vorhanden ist?

Verfasst: Mittwoch 10. Dezember 2008, 20:18
von lunar
Also, soweit ich weiß, nutze BlackJack ja Ubuntu. In Intrepid ist da Version 0.8.4 aktuell, während Gentoo schon 0.9.1 mitbringt. Eventuell hat sich an dem Teil des Codes ja was geändert, aber ich bin ehrlich gesagt zu faul, das Changelog zu durchforsten oder ein Diff zwischen den Tags im Repo zu erstellen ...

Gentoo jedenfalls patcht außer einer kleinen Änderung an einer Erweiterung nichts an den Upstream-Quellen. Und im Ubuntu-Diff für IPython 0.8.4 hab ich beim Überfliegen auch nichts relevantes feststellen können ...

Verfasst: Mittwoch 10. Dezember 2008, 22:44
von Pekh
Grad mal spaßeshalber die ebuilds für 0.8.4 und 0.8.2 probiert - selbes Problem.