Ma c'è il throws UnsupportedEncodingException. QUESTO conta per il chiamante. È perfettamente lecito dichiarare una eccezione checked con il throws anche se quel metodo NON la lancia fuori. Questo perché il throws serve solo per avvertire di un possibile, potenziale, "pericolo" di una eccezione.
In senso generale (non è il tuo caso poiché il metodo è privato) un metodo può dichiarare una eccezione checked ma non lanciarla mentre poi in una sottoclasse che ridefinisce quel metodo può davvero realmente lanciarla. Ma il "pericolo" è già noto dalla super-classe quindi un chiamante che invoca il metodo polimorficamente sul tipo della super-classe è avvertito che una qualche implementazione del metodo può lanciare quella eccezione.
Questi sono concetti sulle eccezioni ... da studiare e sapere ....
P.S: soluzione: togli il throws UnsupportedEncodingException