Ява: получить шестнадцатеричные значения UTF-8 из строки? - PullRequest
5 голосов
/ 14 марта 2012

Я хотел бы иметь возможность преобразовать необработанную строку UTF-8 в шестнадцатеричную строку.В приведенном ниже примере я создал образец строки UTF-8, содержащей 2 буквы.Затем я пытаюсь получить значения Hex, но это дает мне отрицательные значения.

Как я могу заставить его дать мне 05D0 и 05D1

String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");

for (byte x : xxx) {
   System.out.println(Integer.toHexString(x));
}

Спасибо.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Не конвертируйте в кодировку, например UTF-8, если вам нужна кодовая точка. Используйте Character.codePointAt .

Например:

Character.codePointAt("\u05D0\u05D1", 0) // returns 1488, or 0x5d0
3 голосов
/ 14 марта 2012

Отрицательные значения возникают из-за того, что диапазон byte составляет от -128 до 127. Следующий код выдаст положительные значения:

String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");

for (byte x : xxx) {
    System.out.println(Integer.toHexString(x & 0xFF));
}

Основное отличие состоит в том, что он выводит x & 0xFF вместо x, эта операция преобразует byte в int, удаляя знак.

...