UTF-8 Sockets : Windows<->Linux Ein altes Problem

Status
Nicht offen für weitere Antworten.
J

JayJay

Gast
Hi, wie ich in einigen Threads gelesen habe, ist das ein generelles Problem dass einmal Java ASCII (Windows) und unter Linux UTF-8 als Input erwartet wird.

Server läuft bei mir unter Linux. Clients laufen unter Windows. Die Clients schicken dem Server Texte. Nur der Server steht nix was außerhalb von der ascii Tabelle liegt. So nu meine Frage, wie kann ich das ändern?

Am Besten ist es sicherlich, wenn man beide java-programme auf UTF-8 umstellt. Nur wie macht ich das? Kann ich das direkt in Eclipse einstellen?

Würd mich über ein paar Ansätze freuen. :toll:
 
J

JayJay

Gast
Achja noch ne Frage:

Wenn mein Programm auf UTF-8 vorliegt. Wie wir dann in eine Text-Datei geschrieben? im Ascii mode oder UTF-8 modus?
 

HoaX

Top Contributor
nicht String#getBytes() sondern String#getBytes(String) verwenden.

oder wie wandelst du deine strings in bytes um?
 
J

JayJay

Gast
Code:
String input[] = stream.readInput();
for( int i=0; i < input.length; i++ ){
System.out.println( new String( input[i].getBytes("UTF-8") ));
}//for

sollte doch so funktionieren o.??
 
J

JayJay

Gast
Das funktioniert schonmal perfekt. Server (linux) erhält die kodierung perfekt.

Client schickt weg.
Code:
stream.writeln( new String("playerid=\"Über€blikäänè²~*N\",goo=ja\n".getBytes("UTF-8" ) ));


Nur wenn der client etwas empfängt kommt shit raus. garnix mehr stimmt... )=Q"§/)= Q"$/Q)="§$/Q§)=

Code:
String input[] = stream.readInput();
for( int i=0; i < input.length; i++ ){
System.out.println( new String( input[i].getBytes("UTF-8") ));
}//for

jemand eine idee?. Es scheint, dass die kodieren generell nicht stimmt.
 
J

JayJay

Gast
So schaut mein Read-Input noch aus:

Code:
readInput(){
...
line = new String(this.InputStream.readLine().getBytes("UTF-8"));
...
}
 
J

JayJay

Gast
Lösung:
Bei Eclipse könnt ihr unter Run > Run > Progammname > Common die Console Output kodierung festlegen (UTF-8).
Windows (client) > senden:

Code:
stream.writeln( new String("playerid=\"Über€blikäänè²~*N\",goo=ja\n".getBytes("UTF-8" ) ));


Lesen ganz normal (da linux bereits UTF-8 kodierung hat)
Code:
tring input[] = stream.readInput();
for( int i=0; i < input.length; i++ ){
System.out.println( new String( input[i] );
}//for


Server (unter Linux) Auch normal.
 

HoaX

Top Contributor
vielleicht hat dein linux als standard utf-8, aber das ist nicht immer per se so und kann auch umgestellt werden.

was ist "stream" für ein typ? du solltest ein byte[] lesen und mit new String(bytes, "UTF-8") den string erstellen und dich nicht auf irgendwelche "standardeinstellungen" verlassen.

bzw noch besser: inputstreamreader/outputstreamwriter nehmen, da kannst du im konstruktor angeben welches encoding du wünschst
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben