Laden...

Zeichenkodierung bei Sockets

Erstellt von Fabian vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.616 Views
Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren
Zeichenkodierung bei Sockets

Hallo Forum,

ich verschicke Zeichen bzw. Strings über eine Socketverbindung. Jetzt habe ich zum Test mal deutsche Umlaute verschickt, also als String zum Beispiel "äöü". Und siehe da, sie kommen als ? auf der anderen Seite an.

Da habe ich mir gedacht, kein Problem, wirst Du das falsche Encoding angegeben haben. Ich habe dann alle Stellen mit System.Text.Encoding.ASCII.GetString auf System.Text.Encoding.UTF8.GetString geändert. Sowohl auf der Client wie auch auf der Serverseite.

Das hat aber leider nicht geholfen. Die Umlaute werden trotzdem falsch kodiert. Hat einer eine Idee, was ich evtl. noch vergessen haben könnte? Bzw. ist UTF8 überhaupt richtig? Ich habe auch bei den Klassen TcpListener, TcpClient und NetworkStream keine Encoding-Eigenschaften gefunden, die evtl. falsch gesetzt sein könnten. Hätte mich auch gewundert, da die Klassen doch nur einen Bytestrom entgegen nehmen und denen erstmal egal ist, wie der kodiert ist.

Hat da jemand eine Idee?

Danke und Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

P
939 Beiträge seit 2003
vor 18 Jahren

Also erst einmal, ich sehe nicht wo das Problem herrührt oder was vielleicht
noch nicht richtig eingestellt ist. Zeig mal den betreffenden Code.

UTF8 ist schon die richtige Wahl, sollte eigentlich nicht viel Sorgen machen. Dass TcpListener, TcpClient und NetworkStream kein Encoding haben, ist auch in Ordnung. Die Klassen arbeiten ja auf Byte-Ebene, da gibt es keine Zeichen.

Hast du es statt mit Encoding.GetString schon mal mit StreamReader (samt eingestelltem Encoding) versucht? Mit Streams und StreamReader lässt sich meiner Meinung nach einfacher programmieren als mit byte-Arrays. Das nur so am Rande, Encoding.GetString sollte genauso funktionieren, das kann eigentlich nicht der Grund für das Kodierungsproblem sein.

Gruss
Pulpapex

S
8.746 Beiträge seit 2005
vor 18 Jahren

TCP transportiert reinen Binärschleim.... Bytes....

Um Codierung, Byteorder und was weiss ich müssen sich Server und Client selbst kümmern.

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo ihr beiden,

danke für eure Antworten. Ich hab jetzt noch mal alles kontrolliert und mir ist aufgefallen, dass sich da noch ein kleines System.Text.Encoding.ASCII.GetBytes versteckt hatte. Jetzt funktioniert auch alles ohne Probleme.

@Pulpapex: Mit dem StreamReader / -Writer könnteste Recht haben. Das ist evtl. einfacher, als sich die Bytes Kilobytesweise aus dem NetworkStream zu holen und wegzuschreiben (zum Beispiel beim Dateitransfer). Muss ich auf jeden Fall mal ausprobieren, ob das so geht.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de