[Python-de] socket und umlaute

Georg Mischler schorsch at schorsch.com
Don Nov 20 18:47:45 CET 2003


Olaf 'Ruebezahl' Radicke wrote:

> Am Don, 2003-11-20 um 15.38 schrieb Uwe Schmitt:
>
> > Bei Dir liegt "commant" wohl als Unicode-String vor. Dann kann
> > das ja nicht funktionieren. Die zweite Fehlermeldung geht damit konform.
> >
>
>
> O.K. wenn mein "commant" Unicode ist und Socket Unicode
> unterstützt warum knackt er dann ab bei der zweiten Variante?
>
>  self.my_socket.send(commant)

Weil socket nicht "unicode unterstützt". Auf Ebene des Sockets
gibt es nur "bytes". Und "bytes" werden in Python durch normale
Text-Strings repraesentiert.


> mit
> > Richtig:
> >
> >     self.my_socket.send(commant.encode("utf-8"))
>
> Geht es.

In diesem Fall uebertraegt der Socket Text, welcher im
UTF-8 Format kodierte Unicode-Daten enthaelt.


> Aber dann habe ich den Ärger auf der anderen
> Seite(der Verbindung). Da kommt dann an den Stellen wo
> die Umlaute waren nur Kauderwelsch.

Nicht Kauderwelsch, sondern die UTF-8 Kodierung. Das ist so
auch korrekt, denn die hast du ja selber schon im XML-Header
explizit deklariert.


> Das ändert sich auch nicht
> wenn ich beim Empfänger ein commant.encode("Latin-1")
> mache.

Natuerlich kannst du einen UTF-8 kodierten Text nicht direkt
nochmal als Latin-1 kodieren. Den musst du zuerst wieder
in das Python-interne Unicode-Format *dekodieren*.
Erst danach kannst du ihn sinnvoll weiterverarbeiten,
und bei Bedarf auch wieder in eine andere Text-Kodierung
wie Latin-1 umwandeln.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/