Umlaute über Sockets verschicken

Hi,

Mein Rechner und mein Android Smarpthone sind über einen Socket miteinander verbunden.
Ich verwende BufferedReader und PrintWriter.
Der Rechner und das Smartphone tauschen Nachrichten aus. Es handelt sich um einen Chat.

Leider werden alle Umlaute und das ß nicht korrekt dargestellt. Ich sehe auf der Anzeige
nur so komische Fragezeichen, anstelle dieser Buchstaben.

Was muss ich tun, damit ich Umlaute und das ß korrekt auf dem Rechner und dem Android Smartphone darstellen kann?

das problem sollte bekannt sein : ENCODING !
weiteres liefert sufu und google

hint : Windows = Windows / Android = Unix > Windows != Unix

Wie wäre es wenn du auf Client Seite einfach alle Umlaute und ß durch z.B:
&a&(für ä)
&o&(für ö)
&u&(für ü)
&s&(für ß)
ersetzt?
Das müsste für den Anfang funktionieren!

Wie wäre es wenn du auf Client Seite einfach alle Umlaute und ß durch z.B:
&a&(für ä)
&o&(für ö)
&u&(für ü)
&s&(für ß)
ersetzt?
Das müsste für den Anfang funktionieren!

Schwachsinn. Damit ist:
a.) nicht garantiert das wirklich alle Sonderzeichen genutzt werden können
b.) Wozu unnütze replacing-Power verwenden, wenn man einfach nur richtig Konfigurieren muss?

Auf beiden Seiten sollte die Applikation selbst auf UTF-8 laufen - Dies solltest du beim Builden auch setzen. Wenn du eine IDE nutzt, klicke auf die Projekt-Einstellungen und wähle dort UTF-8 aus! Wenn dies dann immer noch zu Charset-Problemen führt gibts bekanntlich auch:

new String(/* ... */, "UTF-8");

.getBytes("UTF-8");

alles doof! Du Sackdas hilft so gar nicht weiter das machst du[DUKE] [/DUKE]

Dafür gibt’s was besseres: https://de.wikipedia.org/wiki/Unicode

Kurzform

new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 

und analog beim Schreiben

In diesem Zusammenhang sind die Konstanten in der wenig bekannten Klasse http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html sehr hilfreich. Das spart einen oft das Gewürge mit Strings als Namen für Charsets.

Versenden von Umlauten geht so nicht, dafür muss man die Klasse Söckät nutzen.

Mal etwas von 2013. Es ist wahrhaftig nicht so einfach, einfach char’s (0…(2^16)-1) hin- und her zuschicken. Falls noch mal vorbei schaust, schreibe dir eine Methode, die aus char [] byte [] macht und vice versa.