Seite 1 von 1

unicode decode error in den Griff bekommen

Verfasst: Montag 13. Dezember 2004, 23:09
von Aron Squander
Wenn man Html-scraping betreibt oder ähnliches, weiß man nie genau, was für ein encoding kommt. utf-8? latin-1? ascii mit noch was dabei?
Das hier sollte das Problem in den Griff bekommen, ich weiß es ist nicht gerade schön, aber diese Teile sind nie schön. Wenn es aufgrund irgendwelcher seltsamen encodings nicht tut, packt man einfach in die encodings in der __init__ die entsprechenden in Frage kommenden encodings dazu. Wenn ihr meint es taugt doch nix, würde ich das gerne wissen, aber eine elegantere Variante habe ich noch nicht gesehen, und funktionieren tut sie...
Cheers
Aron

Code: Alles auswählen

class MakeItUnicode:
    def __init__(self):
        self.encodings = [
            'utf-8',
            'latin-1',
            'ascii',
            'cp1252',
            ] 

    def doDecode(self, st):
        "Returns an encoding that doesn't fail"
        for encoding in self.encodings:
            try:
                stEncoded = st.decode(encoding)
                return stEncoded
            except UnicodeError:
                pass

    def setAttribute(self, name, data):
        import HTMLFilter
        data = self.doDecode(data)
        try:
            data = data.encode('ascii', "xmlcharrefreplace")
        except:
            print('new method did not fit')

        try:
            if '&#' in data:
                data = HTMLFilter.HTMLDecode(data)
        except UnicodeDecodeError:
            print('HTML decoding failed!!!')

        try:
            data = data.encode('utf-8')
        except:
            print('new utf 8 method did not fit')

        return data