hallo
Ich versuche gerade eine kleine Client-Server Anwendung zu schreiben. Dabei habe ich mir gesagt, ich Encodiere die Daten in UTF-8 um sicher keine Probleme bei Verschiedenen OS zu haben. Die Übertragung findet in XML statt, dazu verwende ich JDom. Leider sind sind die Umlaute immer Falsch, bei Debug Ausgabe am Server oder Client.
Mein Aufbau:
Client Verbindungsaufbau:
Bei den Streams habe ich das Encoding auf UTF-8 gestellt.
Senden von Daten:
Die makeMsg() erstellt das xml:
Nun zum Server, ich verwende NIO, also einen Selector, SocketChannel ...
So schreibe ich das Empfangene xml in einen String:
sharedBuffer ist ein ByteBuffer. Ich decodiere ich die Empfangenen Daten von UTF-8, da sonnst bei der ausgbe nur fragezeichen wären, und jDom sonst irgendwie auch nicht klarkommt ???:L
Ich generiere auf dem Server ein neues XML wie oben mit makeMsg() mit dem unterschied, das ich ein String generiere:
Senden zum Client mache ich so:
Am Client lese ich die Daten mit einem BufferedReader und gebe sie aus.
Auch ein System.out.println(Message.getChild("body").getText()); zum augeben des Textes mit Umlauten sind sie falsch.
Habt ihr eine Idee wo der Fehler sein könnte? ???:L :cry:
Ich versuche gerade eine kleine Client-Server Anwendung zu schreiben. Dabei habe ich mir gesagt, ich Encodiere die Daten in UTF-8 um sicher keine Probleme bei Verschiedenen OS zu haben. Die Übertragung findet in XML statt, dazu verwende ich JDom. Leider sind sind die Umlaute immer Falsch, bei Debug Ausgabe am Server oder Client.
Mein Aufbau:
Client Verbindungsaufbau:
Code:
Socket toserver = new Socket( "192.168.1.34", 9876 );
InputStreamReader inOld = new InputStreamReader(toserver.getInputStream(),"UTF-8");
in = new BufferedReader(inOld);
OutputStreamWriter outOld = new OutputStreamWriter(toserver.getOutputStream(),"UTF-8");
out = new BufferedWriter(outOld);
System.out.println("Encoding, In:"+inOld.getEncoding()+" Out:"+outOld.getEncoding());
Senden von Daten:
Code:
char[] text = DecodeMessage.getInstance().makeMsg(ToName.getText(),msgText.getText()); // in msgText ist der Text mit den umlauten
out.write(text);
out.flush();
Die makeMsg() erstellt das xml:
Code:
Document myDoc = new Document();
char[] t = null;
Element root = new Element("message");
myDoc.setRootElement(root);
// code....
Element body = new Element("body");
body.setText(text); // text mit den umlauten
root.addContent(body);
XMLOutputter out = new XMLOutputter(Format.getRawFormat());
CharArrayWriter temp = new CharArrayWriter();
out.output(myDoc, temp);
t = temp.toCharArray();
return t;
Nun zum Server, ich verwende NIO, also einen Selector, SocketChannel ...
So schreibe ich das Empfangene xml in einen String:
Code:
String Message = "";
// schreibe daten in String
while ((bytes = socketChannel.read(sharedBuffer)) > 0)
{
sharedBuffer.flip();
Message += Charset.forName("UTF-8").decode(sharedBuffer).toString();
//Message += sharedBuffer.asCharBuffer().toString();
sharedBuffer.clear();
}
System.out.println("Neune Nachricht:"+Message);
Ich generiere auf dem Server ein neues XML wie oben mit makeMsg() mit dem unterschied, das ich ein String generiere:
Code:
XMLOutputter out = new XMLOutputter(Format.getRawFormat());
return out.outputString(myDoc);
Code:
out.write(ByteBuffer.wrap(msg.getBytes())); // out ist ein SocketChannel
Am Client lese ich die Daten mit einem BufferedReader und gebe sie aus.
Auch ein System.out.println(Message.getChild("body").getText()); zum augeben des Textes mit Umlauten sind sie falsch.
Habt ihr eine Idee wo der Fehler sein könnte? ???:L :cry: