Чтобы определить источник вашей ошибки транскодирования, проверяйте данные после каждой операции транскодирования. Используйте инструмент , как этот , чтобы определить, какими должны быть значения.
Например, ваш JSP-писатель транскодирует строки Java из UTF-16 (кодирование строк Java) в UTF-8. Другая операция транскодирования выглядит как чтение программы вывода из собственной системы.
/* String[0] as stdout, String[1] as stderr */
String[] results = sshBO.execCommand(cmd, timeout);
Например, вы можете напечатать шестнадцатеричные значения ваших строк, используя такой код:
for (char ch : msg.toCharArray())
System.out.format("%04x ", (int) ch);
Кодовая точка ‘
должна печататься как 2018
. Код записи вашего файла может содержать ошибку, аналогичную коду, который читает ввод, вводя вас в заблуждение относительно источника проблемы.
msg = new String(msg.getBytes("UTF8"), "UTF8"); /* makes no difference */
Это не имеет значения, поскольку он принимает данные UTF-16, транскодирует их в UTF-8, а затем транскодирует обратно в UTF-16. Но кроме этого, если ваша строка повреждена, уже слишком поздно. Вы исправляете ошибку не в том месте.