[Python-de] (Unicode)Wenn ich das richtig sehe...
Diez B. Roggisch
deets at web.de
Die Mai 25 23:38:22 CEST 2004
> </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