unicode decode error in den Griff bekommen

Code-Stücke können hier veröffentlicht werden.
Antworten
Aron Squander
User
Beiträge: 21
Registriert: Donnerstag 5. Februar 2004, 16:12
Wohnort: Mainz
Kontaktdaten:

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

The best view of ones Soul you get
from a little bit over the edge
looking back
Antworten