To co ty zrobiles znaczy: wez string (zakodowany w utf16 bo tak java trzyma swoje stringi), zdekoduj go na reprezentacje bajtow w utf8, a z tego utworz mi string jakby to byly bajty w windows-1250, i wewnetrznie znowu zakoduj do utf16 (w koncu tworzysz natywny javowy string). Nie ma logiki. Aby sprawdzic:
System.out.println(new String('mućka'.getBytes("UTF-8"),"windows-1250"));
rowniez pokazuje krzaki, nawet nie trzeba zapisac do pliku.
Zrob po prostu:
byte[] cp1250Bytes = string.getBytes("windows-1250");
i te bajty zapisujesz do pliku. Przy odczycie musisz zrobic (majac juz te bajty):
String s = new String(bytes, "windows-1250");
i otrzymasz string.
Nie mam zielonego pojecia jak wyglada format PLS, wiem tylko ze zle kodujesz / dekodujesz, wiec to co napisalem moze nie starczyc aby rozwiazac problem. Ale bedziesz blizej.
Jesli PLS to format tekstowy to zadzialaja Writery, ale jesli to jakis binarny, ktorego tylko fragmenty sa stringami kodowanymi w cp-1250, to moze byc ciezko.
Swoja droga, dziwny mi sie wydaje ten format - co robia osoby ktore uzywaja znakow ktore nie sa w cp-1250? Maja krzaki, czy ten PLS jakos umie przechowywac wewnetrznie kodowanie jakie jest uzywane?