Строка в java не имеет кодировки - строки поддерживаются массивом символов, и символ всегда должен быть utf-16, пока они обрабатываются как строки и значения символов.
Кодировка возникает только при экспорте или импорте строк / символов в или из внешнего представления (или местоположения). Передача должна осуществляться с использованием последовательности байтов для представления строки.
Я думаю, что первое решение близко, но также полностью запутано. Сначала вы просите java перевести значения char в их эквивалентные значения в кодировке cp1252 («слово» для символа аналогичной формы в «языке» cp1252). Затем вы создаете строку из этой последовательности байтов, утверждая, что эта последовательность кодов cp-1252 на самом деле является последовательностью кодов utf-8 и должна быть переведена в стандартное представление в памяти (utf-16) из utf-8.
Строка никогда не является utf og cp1252 или чем-то подобным - это всегда символы. Только байтовые последовательности - это utf-8 или cp1252. Если вы хотите преобразовать значения char в строку utf-8, вы можете использовать.
byte[] utfs = myString.getBytes("UTF-8");
На самом деле, я думаю, что проблема кроется в другом месте, возможно, в принтстриме и в том, как он печатает свой ввод. Вы должны стараться избегать преобразования строк и символов в / из байтов, потому что это всегда является основным источником путаницы и проблем. Возможно, вы должны переопределить все методы, чтобы захватить символьные данные перед преобразованием.