Я вызываю библиотечный метод, который возвращает объект типа Serializable. В большинстве случаев значение представляет собой простую строку, поэтому я привожу возвращаемое значение в строку. Чтобы получить строку, я делаю следующее:
String val = (String)data.get("MyString");
Однако возникает проблема, когда полученная строка содержит не-ascii. Например, «Køllert», возвращаемое значение отображается как «KxF8llert». «Ø» заменяется на xF8, которое является соответствующим шестнадцатеричным значением Unicode.
Когда я распечатываю значение в байтах, символ печатает как -8.
byte[] defaultBytes = val.getBytes();
for(int ii=0; ii<defaultBytes.length; ii++) print((int)defaultBytes[ii]);
Есть ли способ «очистить» возвращаемую строку, чтобы ее можно было распечатать как стандартный Unicode, чтобы символ отображался правильно.
Edit
Когда я ввожу фактическую строку, как показано ниже, строка может быть правильно напечатана, а при проверке байтов символ занимает два байта с целочисленными значениями -61 и -72. Может быть, он возвращает UTF-8 вместо Unicode?
String val1 = "Køllert";
byte[] defaultBytes1 = val1.getBytes();
for(int ii=0; ii<defaultBytes1.length; ii++) print((int)defaultBytes1[ii]);
Решение
Извините, что вопрос был расплывчатым. Мне кажется, что следующее работает. Это не так уж сложно, но у меня закрутилось.
String val = new String(data.get("MyString").getBytes("UTF-8"));