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