Вместо того, чтобы пытаться распечатать строку напрямую, выведите значения Unicode для каждого символа. Например:
char[] chars = line.toCharArray();
for (int i = 0; i < chars.length; i++)
{
System.out.println(i + ": " + chars[i] + " - " + (int) chars[i]);
}
Затем найдите соответствующие символы в кодовых таблицах Юникода .
Если вы обнаружите, что он печатает 63, то на самом деле - это вопросительные знаки ... из чего следует, что ваш текстовый файл не является действительно UTF-8 для начала.
Если, с другой стороны, для некоторых символов он печатает "?" но затем значение, отличное от 63, будет означать, что это проблема отображения консоли, и вы правильно читаете данные.