Я вижу проблему. Вы не можете закодировать строку в байты с одной кодировкой и декодировать ее обратно с другой. Если вы хотите преобразовать несколько байтов из / в строку UTF-8, сделайте это только в одну сторону. Класс Java String также использует другую кодировку. Преобразование допустимо (применяется) только во время преобразования из / в строку Java. Если вы хотите преобразовать что-либо из строки UTF-8 в строку Java, сначала поместите это в массив байтов (побайтно или считывая из потока), а затем выполните это ...
Чтобы показать проблему, я запустил ваши строки в моей структуре. (Вам просто повезло, что кодировка вашей консоли или что-то показала вам правильный é в строчной версии.)
Код в моих рамках:
String text = "Alfredo Araya Jiménez";
byte[] ptext = text.getBytes(ISO_8859_1);
String incorrectValue = new String(ptext, UTF_8);
World.writeLine(incorrectValue);
String correctValue = new String(ptext, ISO_8859_1);
World.writeLine(correctValue);
text = "ALFREDO ARAYA JIMÉNEZ";
ptext = text.getBytes(ISO_8859_1);
incorrectValue = new String(ptext, UTF_8);
World.writeLine(incorrectValue);
correctValue = new String(ptext, ISO_8859_1);
World.writeLine(correctValue);
Результат:
<Ч />
Редактировать
То есть вы изменили это так?
public String encodeUTF(String text)
{
byte[] ptext = text.getBytes(ISO_8859_1);
String value = new String(ptext, ISO_8859_1);
return value;
}
На самом деле вам нужно что-то вроде этого (если вы хотите использовать «текст» в Java):
public String encodeUTF(byte[] ptext)
{
String value = new String(ptext, ISO_8859_1);
return value;
}
Но в этом случае ваш метод бессмысленен (понимаете?)… Сначала вам нужно получить свой «текст» в байтах, а затем преобразовать его в правильную строку Java и работать с ней в Java (только в Java) , Java работает с UTF-16 (как указывал Том Блоджет 8 часов назад).
Если вам нужно конвертировать его в UTF-8, вы должны «экспортировать» его так:
public byte[] encodeUTF(byte[] ptext)
{
String value = new String(ptext, ISO_8859_1);
byte[] utf8Text = value.getBytes(UTF_8);
return utf8Text;
}