Unicode control character konvertieren

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
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

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?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Antworten