Seite 1 von 1

Unicode und Windoof problem.

Verfasst: Montag 7. Juli 2008, 12:42
von root_tux_linux
Hi

Hab ein kleines Problem.

Zwar werden mir Strings unter Windows in IDLE zwar korrekt angezeigt aber wenn ich das Script mit python script.py starte nicht.
Alle Umlaute werden falsch dargestellt.
Die einzige Lösung ist dann ein u'string'.
Da ich aber auch Inhalte vom Netz mit dem Script lese und dieser Inhalt auch Umlaute hat hab ich wieder das selbe Problem.

Ich habs schon mit unicode() versucht doch da ändert sich nix.
Auch Codings: utf-8 o.ä. funzt nicht.

Kennt jemand das Problem und weiss eine Lösung?

Verfasst: Montag 7. Juli 2008, 12:47
von n4p

Code: Alles auswählen

# -*- coding: cp1252 -*-
funktioniert zumindest bei mir.
Wird von IDLE auch vorgeschlagen wenn der Coding String falsch oder unvollständig ist.

Verfasst: Montag 7. Juli 2008, 13:05
von lunar
Dieses "Encoding-Cookie" sagt dem Interpreter nur, welche Codierung die Datei hat, so dass er weiß, wie er Unicode-Literale decodieren muss. Mit der Ausgabe auf der Konsole hat das _gar nichts_ zu tun.

Dafür müssen die Strings korrekt encodiert werden. Windows verwendet cp1252, aber es ist keine elegante Lösung, das Encoding hart zu kodieren. Um das Encoding zu bestimmen, gibt es "sys.getfilesystemencoding()" und "sys.stdout.encoding".

Verfasst: Montag 7. Juli 2008, 13:30
von root_tux_linux
Ich habs jetzt mit

# -*- coding: cp1252 -*-

Versucht, ändert aber nix.

Ausgabe wäre: ³nic÷de => 134 anstelle von ünicöde => 134

EDIT:

variable.decode("iso-8859-1").encode(stdout_encoding)

Damit gings.

DANKE :)

Verfasst: Montag 7. Juli 2008, 20:23
von Mad-Marty
Das ist übrigens der imo einzig richtige weg, auf das stdout encoding zu codieren.

Das ist auch kein windows problem sondern nur mangelndes wissen gewesen.

Verfasst: Dienstag 8. Juli 2008, 16:29
von root_tux_linux
Mad-Marty hat geschrieben:Das ist übrigens der imo einzig richtige weg, auf das stdout encoding zu codieren.

Das ist auch kein windows problem sondern nur mangelndes wissen gewesen.
Wieso?

Unter Linux muss ich weder u'string' nutzen noch encode+decode.

Selbst Kumpel von mir der seit bald 4 Jahren in Python & PyGTK schreibt und u.a. Potato (Frontend für Portage) schreibt wusste ned wieso es unter Windows rumspinnt.

Verfasst: Dienstag 8. Juli 2008, 19:11
von BlackJack
Auch unter Linux musst Du auf die Kodierung achten. Wenn das bei Dir noch nie Probleme gab, schön für Dich, aber es ist trotzdem unsauber einfach anzunehmen alle Welt würde Deine bevorzugte Kodierung verwenden.

Verfasst: Donnerstag 10. Juli 2008, 11:50
von root_tux_linux
BlackJack hat geschrieben:Auch unter Linux musst Du auf die Kodierung achten. Wenn das bei Dir noch nie Probleme gab, schön für Dich, aber es ist trotzdem unsauber einfach anzunehmen alle Welt würde Deine bevorzugte Kodierung verwenden.
Ich geh davon aus das alle Welt UTF nutzt.

Ist bei Linux, *BSD, OSX, Solaris usw usf auch so :-P

Naja egal hat sich ja erledigt ^^