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.