Umlaute

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
pyrocker
User
Beiträge: 2
Registriert: Donnerstag 4. Dezember 2008, 18:20

Kann man in einer mit Python erstellen Datei einen Code setzen, der die Umlaute in der "Dos-Box" richtig darstellt? Ich hab da nämlich was mit "ä"s und "ö"s und Spanischen Umlauten... Ist das möglich oder kann ich mein "Projekt" vergessen?

EDIT: Ach ja, ich wollte nur sagen, dass es mir wenig bringt, wenn ich die 'ä's und 'ö's ibn 'ae's und 'oe's umwandle, denn mit spanischen umlauten ist es ja dann automatisch von der Rechtschreibung her falsch...
pyrocker
User
Beiträge: 2
Registriert: Donnerstag 4. Dezember 2008, 18:20

Hat keiner ne Idee???
(Ich weiss, ich bin zu ungeduldig... Aber das ist mein Charakter, da kann ich nix ändern ;))
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Um Sonderzeichen wie Umlaute in der DOS-Box auszugeben musst du dem print Statement lediglich ein Unicode Objekt mitgeben.
Print kodiert den String vor dem Schreiben auf die Konsole mit dem Encoding von sys.stdout.encoding.

Beispiel:

Code: Alles auswählen

# -*- coding: utf-8 -*-

import sys

print "Stdout encoding: %s" % sys.stdout.encoding
print  u"Geflügel"
Bei mir unter DOS:

Code: Alles auswählen

D:\>python umlaute.py
Stdout encoding: cp850
Geflügel
Wie das mit deinen spanischen Zeichen aussieht weiß ich nicht da ich nicht weiß ob die in der Codepage von cp850 abgebildet sind.

Siehe: http://de.wikipedia.org/wiki/Codepage_850
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

pyrocker hat geschrieben:Kann man in einer mit Python erstellen Datei einen Code setzen, der die Umlaute in der "Dos-Box" richtig darstellt? Ich hab da nämlich was mit "ä"s und "ö"s und Spanischen Umlauten... Ist das möglich oder kann ich mein "Projekt" vergessen?
So lange deine Konsole kein Unicode kann wird das nicht klappen. Also cmd.exe fliegt schonmal raus. Vielleicht hast du ja mit der Windows Power Shell mehr Glück...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Darii hat geschrieben:So lange deine Konsole kein Unicode kann wird das nicht klappen.
Quatsch. Es gibt keinen Konsolen die Unicode direkt verstehen, unter Linux wird meist UTF-8 verwendet. Und das DOS-Fenster (oder eher: die Eingabeaufforderung) kann Umlaute durchaus darstellen, wenn man das richtige Encoding wählt, also möglicherweise CP850 auf deutschen Windows-Versionen (weiß nicht so genau, kann mich nicht mehr erinnern).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
szallah
User
Beiträge: 14
Registriert: Dienstag 27. Mai 2008, 07:31

wenn ich mich nicht täusche ist das gängige encoding für windows-systeme im europäischen raum "cp1252"... das ist ein mix aus iso-8859-1 und iso-8859-2... mit dem encoding werden unter windows z.b. txt-dateien gespeichert wenn man es nicht anders definiert.
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

hmmm also so viel ich weiss kann man im DOS aufjedenfall das
spanische ñ darstellen....
sogar das zeichen für Angström....

kyrillisch oder arabisch aufjedenfall nicht...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DjFresH hat geschrieben:kyrillisch oder arabisch aufjedenfall nicht...
Kyrillisch geht mit Codepage 855 und 866. Für Arabisch wurde wohl Codepage 720 verwendet (es gibt für arabisch auch CP708 und CP864 aber ich glaube nicht dass die von MS-DOS verwendet wurden).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Es gibt im Zusammenhang mit locale (und auch wx.Locale) noch etwas zu beachten, zumindest unter Windows (hier ein Beispiel, um das Problem zu verdeutlichen, man beachte Zeilen 7, 11ff):

Code: Alles auswählen

>>> import locale
>>> import sys
>>> sys.stdout.encoding
'cp850'
>>> print u'äöü'
äöü
>>> locale.setlocale(locale.LC_ALL, "german")
'German_Germany.1252'
>>> sys.stdout.encoding
'cp850'
>>> print u'äöü'
""?
>>> print u'äöü'.encode('windows-1252')
äöü
(edit: Python 2.6)
Antworten