Вы создаете строку с одной кодировкой (по умолчанию, скорее всего, UTF-8, если не указано иное), а затем считываете ее с другой несовместимой кодировкой (ISO 8859-1). Это почти всегда создает проблемы с любыми другими символами, отличными от ANSI, так как разные кодировки представляют эти символы с разными последовательностями байтов.
Если вы хотите (плохую) аналогию, это немного похоже на распечатку некоторой латиницы, а затем передачу ее кому-то, кто говорит только по-английски, и спрашиванию, что это значит. Вы могли бы быть в состоянии решить некоторые из них, но другие части этого выйдут как бессмыслица.
Если вы измените код для использования кодировки по умолчанию:
String s4 = "Entraîneur";
String s4a = new String(s4.getBytes(Charset.defaultCharset()));
... тогда s4a
должно содержать правильное значение.