Seite 1 von 1
Unicode control character konvertieren
Verfasst: Sonntag 3. Juli 2011, 08:23
von feldmaus
Hi,
ich habe einige Dateien und Ordner die mein Debian Mint (auf UTF-8 eingestellt) nicht lesen kann. Ein Ordner heißt z.b. bei interner Verarbeitung in Python "B<U+0084>ume" während es über die Konsole mit "tree | less" als "B\204ume" angezeigt wird. Im Prinzip stellt es ein "ä" dar. Wie bekomme ich das konvertiert?
Grüße Markus
Re: Unicode control character konvertieren
Verfasst: Sonntag 3. Juli 2011, 08:36
von sma
Das Zeichen U+0084 ist kein "ä", sondern ist nicht belegt. \204 ist die Oktaldarstellung von \x84 bzw. \u0084. Ein "ä" hat den Codepoint U+00E4. Da muss etwas schief gelaufen sein.
Stefan
Re: Unicode control character konvertieren
Verfasst: Sonntag 3. Juli 2011, 09:06
von feldmaus
sma hat geschrieben:Das Zeichen U+0084 ist kein "ä", sondern ist nicht belegt. \204 ist die Oktaldarstellung von \x84 bzw. \u0084. Ein "ä" hat den Codepoint U+00E4. Da muss etwas schief gelaufen sein.
Stefan
Oh man bin ich Blind, Du hast Recht, kann man das nachträglich manipulieren?
Re: Unicode control character konvertieren
Verfasst: Sonntag 3. Juli 2011, 09:31
von sma
feldmaus hat geschrieben:Oh man bin ich Blind, Du hast Recht, kann man das nachträglich manipulieren?
Einfach die Datei umbenennen? Oder in Python ein `replace("\x84", "\xE4")` ausführen? Beachte aber, dass diese Zeichen gemäß des Datei-Encodings interpretiert werden.
Wenn du das Problem hast, dass du gar nicht einen Unicode-String mit \x84 drin bilden kannst, benutze z.B. dies:
Code: Alles auswählen
#encoding:utf-8
import codecs
def repair(exc):
if isinstance(exc, UnicodeDecodeError) and exc.object[exc.start:exc.end] == '\x84':
return u"ä", exc.end
raise exc
codecs.register_error("repair", repair)
print unicode("B\x84ume", errors="repair")
Stefan