IPython + Unicode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
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.
lunar

Code: Alles auswählen

[1]--> u'ä'
Out[1]: u'\xc3\xa4'
Same problem ... auf einem Gentoo-System.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
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 ...
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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?
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 ...
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Grad mal spaßeshalber die ebuilds für 0.8.4 und 0.8.2 probiert - selbes Problem.
Antworten