[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