Problem mit Umlauten in der Windows-Shell

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
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Hallo,

ich möchte meinen Vokabeltrainer gerne auch unter Windows benutzen können. Leider ist dies nicht möglich, weil die zugehörige Shell sich weigert Umlaute korrekt darzustellen (was sehr unpraktisch ist, wenn man Französisch lernt) und stattedessen irgendwelche kryptischen Zeichen wie |Ã präsentiert. Als Magic-Line habe ich schon

Code: Alles auswählen

# -*- coding: utf-8 -*-
sowie latin-1 und iso-8859-1 versucht. Alles ohne Erfolg.
Wenn ich in der Shell jedoch

Code: Alles auswählen

print u'ä'
eingebe, erhalte ich als Ausgabe auch ein korrekt dargestelltes ä.

Hat jemand eine Idee, wie sich mein Problem lösen lässt?

Danke
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

print u"Hällo Wörld".encode("cp437")
So sollte das unter Windows gehen
TUFKAB – the user formerly known as blackbird
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Danke für die Antwort.

Ein paar Fragen noch: muss ich das dann hinter jeden String schreiben, den ich mit print ausgeben möchte und ist die Magic-Line unter Windows überflüssig?

Ich hab ja schon immer gewusst, dass Microsoft schlecht ist, aber so schlecht... :roll:
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

basti33 hat geschrieben:Ein paar Fragen noch: muss ich das dann hinter jeden String schreiben, den ich mit print ausgeben möchte und ist die Magic-Line unter Windows überflüssig?
Nein. Das Encoding cookie muss mit deinen Editoreinstellungen übereinstimmen.
basti33 hat geschrieben:Ich hab ja schon immer gewusst, dass Microsoft schlecht ist, aber so schlecht... :roll:
Und unter Linux ist es anders? Ob das defaultencoding gesetzt ist, ist meines Wissens nach nicht definiert.

Ich würde dir raten ein Handbuch zu Charsets durchzulesen. Das Thema ist weit komplexer als du annimmst.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@basti33:
Schau mal hier:
[wiki]Von Umlauten, Unicode und Encodings[/wiki]

Eine Lösung ist das Umbiegen von sys.stdout... Macht z.B. der Encodinghelper von gerold:
http://gelb.bcom.at/trac/misc/wiki/Encodinghelper

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

basti33 hat geschrieben: Ich hab ja schon immer gewusst, dass Microsoft schlecht ist, aber so schlecht... :roll:
Naja, unter Linux kannst du ganz schnell in ähnliche Probleme geraten.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Mit der Boardsuche bin ich auf diesen Thread gestoßen, und bei meinem eigentlichen Problem habt ihr mir auch schon geholfen. Ich mag encodings nicht...

Was mir aber bei der Fehlersuche aufgefallen ist: Mein Python (also, die Variante in der Kommandozeile) lebt auch mit einem komishcen Encoding. Auf Umlaute reagiert das Ding nur mit einem komischen Piepton, der mich an die alten Fehlermeldungen per PC-Speaker erinnert.

Kann ich irgendwo feststellen/festlegen, mit welchem Encoding das Ding arbeitet? In der normalen Kommandozeile funktioniert alles, aber sobald ich Python starte nimmt es keine Umlaute mehr.

Ich hoffe mir kann jemand helfen, so läßt sich schwer "mal eben" was probieren.

Danke schonmal,

Sören
basti33
User
Beiträge: 56
Registriert: Donnerstag 24. August 2006, 15:05

Vielleicht geht's ja mit

Code: Alles auswählen

sys.getdefaultencoding()
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Danke, hätte ich auch selber drauf kommen können...
Das liefert mir dann

Code: Alles auswählen

>>> sys.getdefaultencoding()
'ascii'
und erklärt das Problem. setdefaultencoding wird laut Doku aus dem Modul entfernt nach dem "site" abgehandelt wurde (habe ich vorher noch nie was von gehört). Aber über ein Modul "sitecustomize" kann man noch drauf zugreifen.
In meinem sizecustomize steht

Code: Alles auswählen

import sys

sys.setappdefaultencoding = sys.setdefaultencoding
(ist das Standard? Dann muss man die Funktion doch garnicht erst entfernen...).
Damit kann ich dann

Code: Alles auswählen

>>> sys.setappdefaultencoding('iso-8859-1')
machen, was auch in sofern funktioniert, als dass jetzt

Code: Alles auswählen

>>> sys.getdefaultencoding()
'iso-8859-1'
ist.

Bis dahin verständlich, aber warum kann ich immernoch keine Umlaute eingeben? Mit iso-8859-1 sollte das doch funktionieren...

Ich bin verwirrt.

Edit: Ich habe auch "sitecustomize" verändert, um schon bei der initialisierung auf ein anderes Encoding zu wechseln. utf-8 und iso-8859-1 habe ich ausprobiert, funktioniert beides nicht.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Nirven hat geschrieben:Ich bin verwirrt.
Hi Nirven!

Du solltest ``sitecustomize.py`` nicht anrühren. Dieses Modul wird jedes mal ausgeführt, wenn ein Python-Programm gestartet wird. Änderungen in ``sitecustomice.py`` ändern die Einstellungen für **jedes** Python-Programm auf deinem Computer. Das kann zu unerwünschten Nebeneffekten führen. Das ist nicht schlecht, wenn man einen Ordner zum Python-Pfad hinzufügen will, aber ansonsten sollte man sehr vorsichtig damit umgehen.

Um dir einen Überblich über die Thematik zu verschaffen, empfehle ich dir http://www.python-forum.de/topic-5095.html.

Probier auch mal aus, deine ``sitecustomize.py`` umzubenennen, so dass diese nicht mehr ausgeführt wird. Vielleicht steht ja schon etwas drinnen, was Python durcheinander bringt.

- Welches Betriebssystem verwendest du?
- Welche Konsole verwendest du?

``locale`` gibt dir unter Linux das eingestellte Encoding zurück.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Ich habe die sitecusomize auch wieder in den Ursprungszustand versetzt, ich wollte nur probieren was passiert wenn ich dort bereits ein anderes encoding setze.
Da steht jetzt nur drinn, was vorher auch drinn stand

Code: Alles auswählen

import sys

sys.setappdefaultencoding = sys.setdefaultencoding
Betriebssystem ist Windows XP Prof, Konsolle ist das normale cmd. In der Konsole von Windows funktioniert auch alles, aber sobald ich python starte (einfach 'python' eingetippt) aktzeptiert er nur noch Standard-Zeichen (ich vermute ascii). Mein Python:
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Den anderen thread habe ich schon gelesen, und mein ursprünglcihes Problem mit einem wxPython-Script zwar nicht so ganz verstanden, aber
gelöst.

Filesystemencoding ist übrigens 'mbcs', falls das hilft?

Gruß und Dank,

Sören
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Nirven hat geschrieben:Da steht jetzt nur drinn, was vorher auch drinn stand

Code: Alles auswählen

import sys
sys.setappdefaultencoding = sys.setdefaultencoding
Hallo Nirven!

Normalerweise existiert diese Datei ``sitecustomize.py`` nicht. Wenn sie existiert, dann hat schon irgendein Programm eine Änderung vorgenommen. Probier es doch mal aus, die Datei umzubenennen oder woanders hin zu verschieben, den Computer neu zu starten (vielleicht läuft irgendein Python-Service im Hintergrund) und es dann noch einmal auszuprobieren.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten