Problem mit strftime und Monat März

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
tanneg
User
Beiträge: 7
Registriert: Sonntag 29. April 2007, 22:04

Hallo

ich hätte da mal ein Problem:

Unter Linux gibt mir der Befehl

Code: Alles auswählen

print datetime.datetime(2000,3,1).strftime('%B')
korrekt 'März' aus.

Unter Windows erhalte ich stattdessen 'Mõrz', also statt einem ä ein o mit Tilde.

Auf beiden Systemen habe ich vorher mit

Code: Alles auswählen

locale.setlocale(locale.LC_ALL, '')
auf Deutsch umgestellt.

Hat jemand 'ne Idee woran das liegt?

Danke im voraus...
tanneg
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ist das "o mit tilde" nur in Windows CMD oder auch in der INteractiven Python IDLE ?
Ich vermute es ist nur bei CMD.

hast du ein Encodeing angegeben?
Beispiel Kopfzeile:

Code: Alles auswählen

#! /usr/bin/env python
#-*- coding: latin-1 -*-
**edit** Kopfzeile nochmal geändert.
tanneg
User
Beiträge: 7
Registriert: Sonntag 29. April 2007, 22:04

Hallo Sr4l

...stimmt, in der Pythonkonsole unter Windows wird es tatsächlich korrekt ausgegeben.

Ein Encoding habe ich abgegeben: # -*- coding: utf-8 -*-


Zur Erklärung. Ich schreibe ein Programm welches unter Linux und Windows lauffähig sein soll. entwickelt wird das Programm unter Linux. Ich habe bei den Umlauten keine Probleme. Es ist lediglich der o.g. Sachverhalt der Probleme bereitet.

Gruß
tanneg
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

das ist der inhalt von t.py

Code: Alles auswählen

#! /usr/bin/env python
#-*- coding: latin-1 -*-

print "LÖL"
print u"LÖL"
und das ist die CMD Ausgabe unter XP SP2:

Code: Alles auswählen

C:\>t.py
LÍL
LÖL
u = Unicode String
mit UTF-8 als codeing gibt es nen error bei ``print u"LÖL"``
tanneg
User
Beiträge: 7
Registriert: Sonntag 29. April 2007, 22:04

Danke für die Antworten, aber:

so klappt es unter Windows, aber unter Linux nicht mehr...

Es geht auch gar nicht so sehr um 'print'. Ich habe nur festgestellt, dass das Ergebnis in der Konsole oder Shell das gleiche ist wie im Programm.
Die Methode strftime erzeugt einen String, den ich intern, also im Programm verwende. Dort steht dann z.B:

Code: Alles auswählen

s = datetime.datetime(2000, 3, 1).strftime('%B')
return s.replace('ä', 'ä')
Bei .replace wird unter Windows das 'ä' nicht erkannt (wegen o Tilde statt ä)!

Ich habe schon mit verschieden Encodings getestet, und entsprechenden Dateikodierungen.

Was mache ich falsch? Seit tagen...

Danke und Grüße
tanneg
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

das liegt nur an deinem UTF-8
kann das sein?

mach mal latin-1 daraus
BlackJack

`strftime()` liefert das Ergebnis in der Kodierung die in der "Umgebung" eingestellt ist.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

und Windows CMD kann das nicht?
wie gesagt wenn man es als Unicode String printet funzt es unter Windows.
BlackJack

Was kann Windows CMD nicht? Und wie bekommst Du Unicode von `strftime()`?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

von strftime() bekomme ich garnicht
aber ist auch egal ahbe heute wieder garnicht geschaft weil ich nur im forum gelesen habe ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:wie gesagt wenn man es als Unicode String printet funzt es unter Windows.
Du printest aber kein Unicode, die Ausgabe ist immer in einem Encoding wie UTF-8 oder Latin-1.

Siehe: [wiki]Von Umlauten, Unicode und Encodings[/wiki], Allgemeine Lösung für Umlautprobleme?, dort könnten deine Probleme schon gelöst sein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten