ne = new String(tmp.getBytes("windows-1250"), "Cp1250");
ta linijka jest bez sensu, jdyne co robi to bierze stringa tmp, koduje go do tablicy bajtow z kodowaniem windows-1250, a nastepnie tworzy nowego stringa z kodowaniem cp1250, ktore jest dokladnie tym samym co to poprzednie, to tylko 2 aliasy na to samo, sprawdz:
public class Test {
public static void main(String[] args) throws Exception {
Charset c = Charset.forName("windows-1250");
for (String s : c.aliases()) {
System.out.println(s);
}
}
}
co do \n - mowisz ze masz zawsze, w przykladzie ktory podales nie masz tego :>
zapisujesz uzywajac DataOutputStream, czyli streama ktory dziala na bajtach, a czytasz uzywajac Readera ktory dziala na charach, wiec jestes niekonsekwentny.
mozesz robic tak:
String s = "string";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStreamSocketa, "UTF-8"));
bw.write(s + "\n"); //zapisujemy stringa, wewnatrz przechodzi kodowanie UTF-8, dodatrkowo dodajemy enlina na koniec
...
bw.flush() / bw.close(); // close robi flusha zanim zamknie strumien
no i teraz po drugiej stronie:
BufferedReader br = new BufferedReader(new InputStreamReader(inputStreamSocketa, "UTF-8"));
String line = br.readLine();
...
br.close();
voila
przy czym kodowanie InputStreamReadera i UptputStreamWriterea nalezy podawac jesli program uruchamiany jest na platformch z roznym kodowaniem domyslnym (np win: cp1250, lin: utf-8) zeby ladnie sie wszystko czytalo i zapisywalo. jesil program zabawka z windy na winde np to nie trzeba wcale podawac kodowania, standardowo radzi sobie znakomicie