
</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>
Die Thematik ist halt kompliziert und maessig gut verstanden - und das in jeder Sprache. Schau dir mal die Java-Apis an - da wurden in der Version 1.2 oder so dann auch mit einem mal an bestimmten Stellen Encoding-Angaben zur Pflicht, wenn man von bytes auf Strings oder zurueck wollte. Wir leben eben in einer komplexen Welt nach dem Turmbau zu Babel.....
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.
Das Modul _kann_ das nicht erkennen - woher denn auch? Das sind nur bytes - die koennten doch auch binaere floating point daten sein, who knows. Wenn du woher auch immer Daten bekommst, deren encoding du nicht kennst, kannst du nur heuristisch vorgehen - mal sehen, was klappt. Und wenn die Daten gemischt sind, dann ist Schei*e - aber weder python noch eine andere Sprache kann damit automatisch korrekt umgehen. Das ist immer die Schuld der Programmierer - wenn nicht deine, dann halt die der Leutz von denen du die Daten bekommst.
Damit wir uns richtig verstehen: es geht mir oft genauso, und das auch gerne mal in java.
p.Parse(doc_u8, 1)
klappt bei mir.
p.Parse(doc_u, 1)
# Rums! Und noch mal... # UnicodeError: ASCII encoding error: ordinal not in range(128)
Ja - weil intern unicode durch einfaches verwenden halt zu ascii wird. mach mal str(doc_u), knallt auch.
Du kannst doch die Deklaration deines xml-strings parsen - regex genuegt - und dann das verwendete encoding verwenden. Falls du bereits u"" hast direkt, sonst musst du eben decode/encode aufrufen. Im letzteren Falle kanns beim decode krachen - dann musst du das decode halt mit gaengigen codecs probieren, bis du das richtige gefunden hast. Und demjenigen auffe Finger kloppen, der dir den Schund liefert....
MfG Diez
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de