String s - это серия символов, которые в основном не зависят от какой-либо кодировки символов (хорошо, не совсем независимы, но достаточно близки для наших нужд сейчас). В какой бы кодировке ваши данные ни находились, когда вы загружали их в строку, они уже были декодированы. Декодирование выполнялось либо с использованием системной кодировки по умолчанию (которая практически ВСЕГДА ОШИБКА, никогда не используйте системную кодировку по умолчанию, поверьте мне, у меня более 10 лет опыта работы с ошибками, связанными с неправильными кодировками по умолчанию) или кодировкой, которую вы явно указали когда вы загрузили данные.
Когда вы вызываете getBytes ("ISO-8859-1") для строки, вы запрашиваете, чтобы строка была закодирована в байтах в соответствии с кодировкой ISO-8859-1.
Когда вы создаете строку из байтового массива, вам необходимо указать кодировку, в которой представлены символы в байтовом массиве. Вы создаете строку из байтового массива, которая была закодирована в UTF-8 (и чуть выше, чем вы закодировали ее в ISO-8859-1, это ваша ошибка).
То, что вы хотите сделать, это:
byte bytes[] = s.getBytes("UTF-8");
s = new String(bytes, "UTF-8");