Unicode und Windoof problem.

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
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

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?
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

Code: Alles auswählen

# -*- coding: cp1252 -*-
funktioniert zumindest bei mir.
Wird von IDLE auch vorgeschlagen wenn der Coding String falsch oder unvollständig ist.
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".
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

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 :)
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

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.
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

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.
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
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.
root_tux_linux
User
Beiträge: 36
Registriert: Sonntag 16. Dezember 2007, 04:18

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 ^^
AMD Athlon 64 X2 6000+, ASUS M2N-SLI Deluxe, ASUS EN8600GTS Silent, 4GB Apacer DDR2 800Mhz | Gentoo Linux x86_64
AMD Sempron 2500+, MSI KT4, ASUS N6200, 2x 512MB Apacher DDR 400Mhz, Hauppauge PVR150 | Arch Linux i686
### Sorry for my bad english ###
Antworten