[Python-de] xml mit Umlauten parsen

Mathias Uebel mathias.uebel at meeloon.de
Mo Mär 17 16:15:53 UTC 2008


Hallo Dietz,

Diez B. Roggisch schrieb:
> On Monday 17 March 2008 14:40:10 Mathias Uebel wrote:
>   
>> Hallo Leute,
>>
>> ich habe gerade keine Lösung für Folgendes:
>>
>> # tv-movie lesen
>> import urllib2, re
>> my_url = urllib2.urlopen('http://www.tvmovie.de/rss/tvjetzt.xml')
>> my_xml = my_url.read()
>> my_url.close()
>>
>> # tv-movie xml parsen
>> import xml.dom.minidom
>> dom = xml.dom.minidom.parseString(my_xml)
>>
>> UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in
>> position 28: ordinal not in range(128)
>>
>> [...]
> [...]
>
> wo genau bitte kommt denn der Fehler? beim erzeugen des DOM? Oder in code den 
> du uns nicht zeigst?
>   
Ja, genau; in dem Teil, der jetzt kommt:

def liesText(pretext, knoten):
    for k in knoten.childNodes:
        if k.nodeType == k.TEXT_NODE:
            print pretext, k.nodeValue.strip()
 
def liesAdressen(knoten):
    for num, elem in enumerate(knoten.getElementsByTagName("item")):
        #print type(elem)
        print "%d. item:" % (num + 1)
        for my_title in elem.getElementsByTagName("title"):
            liesText("title:", my_title)
        for my_descrip in elem.getElementsByTagName("description"):
            liesText("description:", my_descrip)
        print
 
def dokument(start):
    for elem in start.getElementsByTagName("channel"):
        liesAdressen(elem)
 
dokument(dom)

Ausgabe:
1. Item
... wenn der erste Umlaut erscheint
6. item:
title: 17:00 RTL II - Immer wieder Jim
description: Traceback (most recent call last):
  File "tv-now.py", line 54, in ?
    dokument(dom)
  File "tv-now.py", line 52, in dokument
    liesAdressen(elem)
  File "tv-now.py", line 47, in liesAdressen
    liesText("description:", my_descrip)
  File "tv-now.py", line 38, in liesText
    print pretext, k.nodeValue.strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in
position 25: ordinal not in range(128)
>Exit code: 1

Danke