os.rename - Unicode

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
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

Hallo
habe folgendes Problem:
ich will unter Linux eine Datei umbenenen mit Umlauten. Wenn ich die Datei umbenannt habe dann habe ich eine Datei wie z.B. aufräumen statt aufräumen.
Weiss jemand wie ich dem os.rename den latin1-Zeichensatz beibringen kann, oder geht der os.rename nur mit Unicode?
Was ist eigentlich wenn die Quelldatei schon Umlaute enthält - findet er dann auch die Datei?

Gruß
Michael B.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi michael070380,

sys.getfilesystemencoding() gibt dir das Encoding des Filesystem aus, na was auch sonst.

Code: Alles auswählen

import sys
filename = u"Dateiname_mit_Umlauten_äöü".encode(sys.getfilesystemencoding())
codiert den Dateinamen in dem im System eingestellten Zeichensatz.


Gruß

Dookie
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

Hi Dookie
habe jetzt leider auf meinem Linux nur eine Python-Version 2.2. Deshalb habe ich es auf meinem Windows-System (Python 2.3.2) getestet und habe immer noch folgende Fehler:

>>>
>>> filename = u"Dateiname_mit_Umlauten_äöü".encode(sys.getfilesystemencoding())

>>> rename ("2", "1")
>>> rename ("1", filename)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
OSError: [Errno 22] Invalid argument
>>> print filename
Dateiname_mit_Umlauten_??ü
>>>

Weiss nicht was ich mit dieser Fehlermeldung anfangen soll. Auch die Fehlerhafte Ausgabe von print filename wundert mich.

P.S. Zeile rename ("2", "1") diente als Test für Zugriffsrechte etc. - Befehl wurde erfolgreich ausgeführt.

Gruß
Michael B.
:?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

was sagt den print sys.getfilesystemencoding()?

Gruß

Dookie
Gast

>>> print sys.getfilesystemencoding()
mbcs
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

Uups... nicht eingelogt...

>>> print sys.getfilesystemencoding()
mbcs

Gruß
Michael B.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

versuchs mal mit

Code: Alles auswählen

filename = u"Dateiname_mit_Umlauten_äöü".encode("latin-1")
Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. mbcs hab ich auch unter Windows... wie rufst du denn Python auf? Im Dos-Fenster oder als IDLE? Im DOS-Fenster ist es ja logisch, dass es nicht gehen kann, weil da als Zeichensatz ASCII gilt, während das "restliche Windows ANSI verwendet. Tja, das zu beheben ist nun ein Dilemma. Ich kenn mich nun leider wirklich nicht gut genug mit den Codecs aus, aber vielleicht kann dir da Dookie helfen :o

Milan
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

er macht zwar einen rename aber die Datei sieht dann auf der Kommandozeile so aus:
Dateiname_mit_Umlauten_""?

Vom Explorer will ich gar nicht erst reden :wink:

Gruß
Michael B.
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

Hi Milan

ich nutze Python auf der Kommandozeile. Das ist, wie oben schon erwähnt, aber nur eine "Test-Umgebung". Für den eigentlichen Einsatz brauche ich den Befehl unter Linux.

Gruß
Michael B.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

also bei mir unter linux klappts

Code: Alles auswählen

>>> import sys
>>> print u"Text__mit_Umlauten_öäü".encode(sys.getfilesystemencoding())
Text__mit_Umlauten_öäü
>>>
mit Windows kenn ich mich nicht aus.


Gruß

Dookie
michael070380
User
Beiträge: 29
Registriert: Freitag 16. Mai 2003, 09:05
Wohnort: Pfaffenhofen

Ja unter Linux klapt es.
Danke und Gruß
Michael B.
Antworten