Charset socket

Olá pessoal…

Tenho um problema aqui… tenho um socket server rodando no linux e tenho vários clientes conectados rodando no windows e os acentos vem todos bugados como posso resolver isto…

Estou usando para escrever e ler DataInputStream e DataOutputStream

O seu problema é na conversão byte[] <-> String.

Em vez de usar, por exemplo:

String s = "Gisele Bündchen";
byte[] bytes = s.toByteArray(); // você não especificou o charset e isso vai bugar tudo

use algo como:

String s = "Gisele Bündchen";
byte[] bytes = s.toByteArray("ISO-8859-1"); // fica compatível com o Windows
String t = new String (bytes, "ISO-8859-1"); // aqui especificamos o charset, para evitar confusões

Certo thingol, mas e quando eu tiver um cliente linux, vou poder usar o ISO-8859-1 também?

Mudei, mas agora acontece o seguinte erro…

Vem uma parte da string e o resto vem um monte de quadradinho, como se fossem caracteres inválidos

Qual o melhor jeito de escrever e ler no socket? usando o DatainputStream e o DataOutputStream, ou usar bufferedread?

Para ler e escrever em sockets, use o modo binário (usualmente DataInputStream e DataOutputStream.) Não use BufferedReader/BufferedWriter.