[Python-de] glob stirbt mit unicode error

Robert Rottermann robert.rottermann at gmx.ch
Di Mär 6 23:18:18 CET 2012


Am 06.03.2012 19:16, schrieb Christopher Arndt:
> On 06.03.2012 17:42, robert at redcor.ch wrote:
>> was kann ich da machen um das Problem zu beheben?
>> danke für eure Typs.
>>
> Lass mich raten,  die Variable 'ospath' referenziert ein
> Unicode-Stringobjekt, oder?
>
> Die Funktionen in os.path haben die etwas ungewöhnliche EIgenschaft,
> wenn man ihnen einen Pfad als Unicode-String übergibt, auch
> Unicodestrings als Ergebnis zurückzuliefern. In der Erweiterung trifft
> dies auch auf glob.glob() zu.
>
>>>> import glob
>>>> glob.glob('*')
> ['file1', 'file2', ..., 'filen']
>>>> glob.glob(u'*')
> [u'file1', u'file2', ..., u'filen']
>
> Das klappt aber nur, wenn die Dateinamen mit dem Default
> Filesystem-Encoding zu Unicode dekodiert werden können.
>
>>>> sys.getfilesystemencoding()
> 'UTF-8'
>
> Unter mir noch nicht ganz ersichtlichen Umständen kann es dabei zu den
> von dir erlebten UnicodeDecoding Errors kommen, wenn Filenamen vorhanden
> sind, die nicht dem Filesysetmencoding entsprechen, manchmal aber auch
> nicht (dann wird einfach ein normaler, nicht-dekodierter String für die
> entspr. Datei zurückgegeben).
>
> Lösungsmöglichkeit:
>
> a) Pfadangaben immer als opaque Byte-Strings betrachten und bei der
> Ausgabe(print, etc.) ggf. repr() benutzen.
>
> b) die intern verwendeten Uncode-String immer selbst von nach/zu
> Filesystemencoding codieren, dem User die Möglichkeit geben, das
> benutzte Encoding zu setzen und evtl. auch ein Fallback.
>
> for file in os.listdir(path):
>      try:
>          file = file.decode(options.fsencoding)
>      except UnicodeDecodeError:
>          file = file.decode(option.fallback_fsencoding)
>
> Wenn man alle Fehler abfangen will, kann man im zweiten decode-Aufruf
> auch noch errors="backslashreplace" o.ä. setzen, aber das würde ich
> nicht unbedingt empfehlen.
>
> Chris
> _______________________________________________
> python-de maillist  -  python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de
Besten Dank Chris,
wenn ich nur string verwende, klappts.

wobei ich jetzt eine Meldung bekomme:
<string>:1: UnicodeWarning: Unicode equal comparison failed to convert 
both arguments to Unicode - interpreting them as being unequal

Wobei, die Warnung kann auch von woanders her kommen
Gruss
Robert




Mehr Informationen über die Mailingliste python-de