Python und isolatin-1

Hallo allerseits,

hab da 'n Problemchen mit Python (2.2.2):
Wenn ich mit zipfile diverse Dateien in eine Zip-Datei packen will, dann sind danach leider die deutschen Umlaute in den Dateinamen innerhalb der Zip-Datei für die Katz (und werden durch andere Sonderzeichen ersetzt).

Was kann ich tun???

1000 Dank schon im Voraus…

Gruß Lala

Hi,

hab da 'n Problemchen mit Python (2.2.2):

oh, selten gesehen :smile: Besteht das Problem noch?

Wenn ich mit zipfile diverse Dateien in eine Zip-Datei packen
will, dann sind danach leider die deutschen Umlaute in den
Dateinamen innerhalb der Zip-Datei für die Katz (und werden
durch andere Sonderzeichen ersetzt).

Hast Du mal versucht, die ‚Strings‘ in u’Unicode’ umzuwandeln?

Cheatah

Hi Cheatah…

Hast Du mal versucht, die ‚Strings‘ in u’Unicode’ umzuwandeln?

Ja, aber da krieg ich 'ne Fehlermeldung…

z. B. (angenommen im Verzeichnis ‚xxx‘ befindet sich
nur eine Datei namens ‚begrüßung.txt‘):

>>> import os
>>> dateiname = os.listdir(‚xxx‘)[0]
‚begr\xfc\xdfung.txt‘
>>> ‚begrüßung‘ # man beachte den Unterschied
‚begr\x81\xe1ung‘
>>> unicode(dateiname)
[…] UnicodeError: ASCII decoding error: ordinal not in range(128)

dateiname.encode(…) dateiname.decode(…) klappt auch nicht …

D’ooooohhh!!!

Jedenfalls hab ich versucht das Problem folgendermaßen zu „umgehen“ (da hat die Welt aber sicher auch schon schönere Lösungen gesehen):

kodierung = [0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 0x20, 0x20, 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5,
 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0x20, 0xa9, 0xc4, 0xf8, 0xf1,
 0xfd, 0xfc, 0x20, 0xe6, 0xf4, 0xfa, 0x20, 0xfb, 0xa7, 0xaf,
 0xac, 0xab, 0xf3, 0xa8, 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f,
 0x92, 0x80, 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8,
 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, 0x9d, 0xeb,
 0xe9, 0xea, 0x9a, 0xed, 0xe7, 0xe1, 0x85, 0xa0, 0x83, 0xc6,
 0x84, 0x86, 0x91, 0x87, 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1,
 0x8c, 0x8b, 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6,
 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe8, 0x98]


def latin1\_zu\_ascii(s):
 r = ''
 for z in s:
 if ord(z)\>=128:
 r += chr(kodierung[ord(z)-128])
 else:
 r += z
 return r

Anyway…

Grüße und Dank
von Lala

Hi,

[…] UnicodeError: ASCII decoding error: ordinal not in
range(128)

hilft Dir http://www.python.org/doc/current/tut/node5.html#l2h-3 weiter?

dateiname.encode(…) dateiname.decode(…) klappt auch nicht

Which means?

Jedenfalls hab ich versucht das Problem folgendermaßen zu
„umgehen“ (da hat die Welt aber sicher auch schon schönere
Lösungen gesehen):

Uiuiui … aber zumindest ist es kreativ :wink:

Cheatah

Hi Cheatah…

hilft Dir
http://www.python.org/doc/current/tut/node5.html#l2h-3 weiter?

Many thanks, jetzt weiß ich jedenfalls mal (nach längerem Ausprobieren), dass dateiname.decode(‚mbcs‘).encode(‚cp850‘) das Ergebnis liefert, das ich haben wollte … allerdings gilt das z. B. auch für dateiname.decode(‚latin1‘).encode(‚cp437‘) … mal abgesehen, dass ich nicht weiß, was denn nun richtig ist, scheint mir das ja mal mächtig plattformunabhängig zu sein (zumal es die sys.getfilesystemencoding-Funktion erst ab Python 2.3 gibt) … anyway, die Chose muß eh bloß auf Windows und Linux laufen und das tut jetzt dann auch korrekt …

Wie gesagt vielen Dank für Deine Hilfe

Greetinx
Lala