Java Char в его шестнадцатиричное строковое представление в формате unicode и наоборот

Мне нужно сгенерировать шестнадцатеричный код символов Java в строки и снова проанализировать эти строки. Я нашел здесь, что разбор может выполняться следующим образом:

char c = "\u041f".toCharArray()[0];

Я надеялся на что-то более элегантное, например Integer.valueOf() для разбора.

Как правильно генерировать шестнадцатеричный юникод?

Ответы

Ответ 1

После более глубокого чтения javadoc говорит, что методы Character, основанные на параметрах char, не поддерживают все значения юникода, но те, которые берут коды ( т.е. int).

Следовательно, я выполнял следующий тест:

    int codePointCopyright = Integer.parseInt("00A9", 16);

    System.out.println(Integer.toHexString(codePointCopyright));
    System.out.println(Character.isValidCodePoint(codePointCopyright));

    char[] toChars = Character.toChars(codePointCopyright);
    System.out.println(toChars);

    System.out.println();

    int codePointAsian = Integer.parseInt("20011", 16);

    System.out.println(Integer.toHexString(codePointAsian));
    System.out.println(Character.isValidCodePoint(codePointAsian));

    char[] toCharsAsian = Character.toChars(codePointAsian);
    System.out.println(toCharsAsian);

и я получаю:

enter image description here

Поэтому я не должен говорить о char в моем вопросе, а скорее о массиве символов, поскольку символы Unicode могут быть представлены более чем одним char. С другой стороны, int покрывает все это.

Ответ 2

Это создаст шестнадцатеричное представление char:

char ch = 'ö';
String hex = String.format("%04x", (int) ch);

И это преобразует шестнадцатеричную строку обратно в char:

int hexToInt = Integer.parseInt(hex, 16);
char intToChar = (char)hexToInt;

Ответ 3

На уровне строк: В следующем случае используется не char, а int, скажем, для китайца, но также подходит для символов.

    int cp = "\u041f".codePointAt(0);
    String s = new String(Character.toChars(cp));

На уровне native2ascii: Если вы хотите конвертировать назад и вперед между символами \uXXXX и Unicode, используйте apache, commons-lang StringEscapeUtils:

    String t = StringEscapeUtils.escapeJava(s + "ö");
    System.out.println(t);

В командной строке native2ascii можно конвертировать назад и вперед файлы между u-escaped и сказать UTF-8.