
On Monday 24 May 2004 21:27, Diez B. Roggisch wrote:
Am Montag, 24. Mai 2004 19:37 schrieb Olaf 'Rübezahl' Radicke:
On Sunday 23 May 2004 23:31,Martin v. Löwis wrote:
xml.parsers.expat kann Unicode.
Ich bekomme eine Fehlermeldung das Zeichen XY(Umlaute) nicht korrekt sind. Wenn ich die Ausnahme abfange, ist das Ergebnis korrekt. In sofern stimmt es das xml.parsers.expat *quasi* Unicode kann.
Nein - er kann. Siehe angehangenes Skript.
Erfahrungsgemaess kommen die meisten Fehler im Umgang mit encodings aus dem Unverstaendnis der Programmierer
</Polemik-Tag> Das wird wohl so sein, AAAABER.... wenn man sich was unverständliches aus denkt, muss man sich nicht wundern wenn es nicht verstanden wird. </Polemik-Tag>
#!/usr/bin/python import xml.parsers.expat
# 3 handler functions def start_element(name, attrs): print 'Start element:', name, attrs def end_element(name): print 'End element:', name def char_data(data): print 'Character data in utf8:', data.encode("utf8") print 'Character data in latin1:', data.encode("latin1")
p = xml.parsers.expat.ParserCreate()
p.returns_unicode = True p.StartElementHandler = start_element p.EndElementHandler = end_element p.CharacterDataHandler = char_data
doc_l1 = unicode("""<?xml version="1.0" encoding="latin1"?> <parent id="top"><child1 name="paul">Text goes here</child1> <child2 name="fred">lauter Umlaute: üä </child2> </parent>""","latin1")
doc_u8 = """<?xml version="1.0" encoding="utf-8"?> <parent id="top"><child1 name="paul">Text goes here</child1> <child2 name="fred">lauter Umlaute: üä </child2> </parent>""".decode("latin1").encode('utf8')
doc_u = u"""<?xml version="1.0" encoding="utf-8"?> <parent id="top"><child1 name="paul">Text goes here</child1> <child2 name="fred">lauter Umlaute: üä </child2> </parent>"""
#print doc_l1 #print doc_u1
p.Parse(doc_l1.encode("latin1")) p.Parse(doc_l1) # Plums! Und fliegt auf die Fr**** # Das ist aber schade! Sicher, die im XML steht es soll # Latin-1 sein, aber die Funktionen die das XML an den # Parser (bei mir) weiterreichen, kennt die Codeirung nicht # und können sie auch nicht "vorbereiten" für den Parser # - bis her. Wenn es für das Modul unmöglich ist zu erkennen # "ah, das ist Unicode, auch wenn in Header was anderes steht" # Dann muss ich entweder die Schnittstellen weiter aufweichen # und nicht-unicode zwischen den Objekt-Instanzen durchreichen # oder noch mehr casten und strings analysieren.
p.Parse(doc_u8, 1)
# Klatsch! Wieder auf die Nase gefallen: # xml.parsers.expat.ExpatError: junk after document element: line 4, column 9
p.Parse(doc_u, 1)
# Rums! Und noch mal... # UnicodeError: ASCII encoding error: ordinal not in range(128)
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de