Возможно, проблема в том, что строка выводится.
Я предлагаю вам подтвердить, что вы правильно читаете символы Юникода, выполнив что-то вроде этого:
for (char c : sentence.toCharArray()) {
System.err.println("char '" + ch + "' is unicode codepoint " + ((int) ch)));
}
и посмотрите, правильны ли кодовые точки Unicode для испорченных символов.Если они верны, то проблема в выходной стороне: если нет, то в входной.