Массив байтов содержит символы в специальной кодировке (которую вы должны знать).Способ преобразования его в строку:
String decoded = new String(bytes, "UTF-8"); // example for one encoding type
Кстати - необработанные байты могут отображаться как отрицательные десятичные числа только потому, что тип данных java byte
подписан, он охватывает диапазон от -128до 127.
-109 = 0x93: Control Code "Set Transmit State"
Значение (-109) является непечатным управляющим символом в UNICODE.Таким образом, UTF-8 не является правильной кодировкой для этого символьного потока.
0x93
в «Windows-1252» - это «умная цитата», которую вы ищете, поэтому Java-имя этой кодировки"CP1252".Следующая строка содержит тестовый код:
System.out.println(new String(new byte[]{-109}, "Cp1252"));