Tento kód
String fVal = new String(val.getBytes(), "ISO 8859-2");
nepřevádí kódování. Pouze vezme bajty z původního řetězce (ten je v Unicode, protože v Javě je každý řetězec interně v Unicode) a pak z nich vytvoří nový řetězec, přičemž konstruktoru je dáváno k uvěření, že bajty obsahují ISO-8859-2 znaky - což není pravda. Navíc, nový řetězec bude opět v Unicode, viz výše.
Proto je v ULEncoderu metoda encode(string) deprecated a místo ní se používá metoda encode(string, encoding). Pokud by se kódování řešilo nějak ve vlastní režii, je třeba pracovat s bajty v daném kódování, které se z řetězce získají pomocí metody getBytes(encoding).
Jinak pozor na to, že vstupní data v Unicode nemusí být převeditelná do ISO-8859-2 - mohou obsahovat znaky, které v tomto kódování nemají odpovídající reprezentaci.