Это проблема:
for(int i=0;i<fileContents.length;i++){
sb.append((char)fileContents[i]);
}
Вы конвертируете каждый байт в символ только путем его приведения. Это эффективно при использовании ISO-Latin-1.
Чтобы прочитать текст из InputStream
, вы адаптируете его с помощью InputStreamReader
, указывая кодировку символов.
Простейшим способом чтения всего файла в строку является использование Guava :
String text = Files.toString(file, Charsets.UTF_8);
Или преобразовать байтовый массив:
String text = new String(fileContents, "UTF-8");