Python HTML Umlaute parsen
-
- User
- Beiträge: 14
- Registriert: Sonntag 8. November 2009, 17:46
Ich habe das Problem dass in meine Python Programm die Umlaute z.B. so ankommen: "ä". Wie bekomme ich die jetzt wieder zu ä? http://wiki.python.org/moin/EscapingHtml habe ich bereits gefunden. Die unescape Methode via HTMLParser löscht das Zeichen und via htmlentitydecode ändert sich nichts. Eine Liste wäre mein letzter Ausweg. Kennt jemand von euch eine bessere Lösung?
Zur Not entfernst du die entities eben per Hand:
Das ist Python3.x. In 2.x müsstest du unichr() benutzen und der String sollte natürlich ein echter String vom Typ unicode sein und kein bytes-Array. Das wiederum bedeutet, dass du die Transformation erst nach dem Parsen machen kannst, weil dann erst der HTML-Parser das Encoding ausgewertet und aus einem bytes-Array mit eine Hierarchie von HTML-Elementen mit Text-Knoten gemacht hat.
Eigentlich sollte aber ein Parser die Dinger selbst auflösen.
Stefan
Code: Alles auswählen
import re
def replace(s):
return re.sub(r'&#(\d+);', lambda m: chr(int(m.group(1))), s)
print(replace("ärger"))
Eigentlich sollte aber ein Parser die Dinger selbst auflösen.
Stefan
@sma: Das was Du da machst, kann die Methode aus dem Wiki, die angeblich nicht funktioniert, auch:
Code: Alles auswählen
In [64]: unescape("Hänschen")
Out[64]: 'H\xe4nschen'
-
- User
- Beiträge: 14
- Registriert: Sonntag 8. November 2009, 17:46
Ja bei mir funktioniert das Leider nicht. Ich verwende:BlackJack hat geschrieben:@sma: Das was Du da machst, kann die Methode aus dem Wiki, die angeblich nicht funktioniert, auch:
Code: Alles auswählen
In [64]: unescape("Hänschen") Out[64]: 'H\xe4nschen'
Code: Alles auswählen
import htmllib
def unescape(s):
p = htmllib.HTMLParser(None)
p.save_bgn()
p.feed(s)
return p.save_end()
>>> unescape('ä')
''
>>> unescape("Hänschen")
'Hänschen'
//edit: Damit funktionierts: http://effbot.org/zone/re-sub.htm#unescape-html