Скажем, у меня есть это:
char registered = '®';
или umlaut
, или любой символ Unicode. Как я могу получить его код?
Скажем, у меня есть это:
char registered = '®';
или umlaut
, или любой символ Unicode. Как я могу получить его код?
Просто преобразуйте его в int
:
char registered = '®';
int code = (int) registered;
Фактически существует неявное преобразование из char
в int
, поэтому вам не нужно указывать его явно, как я делал выше, но я бы сделал это в этом случае, чтобы было очевидно, что вы пытаясь сделать.
Это даст код UTF-16, который совпадает с кодовой точкой Юникода для любого символа, определенного на базовой многоязычной плоскости. (И только символы BMP могут быть представлены как значения char
в Java.) Как говорит Andrzej Doyle, если вы хотите, чтобы код кода Unicode из произвольной строки, используйте Character.codePointAt()
.
Как только вы получите код кода UTF-16 или коды кода Unicode, но из которых являются целыми числами, это зависит от вас, что вы с ними делаете. Если вам требуется строковое представление, вам нужно точно определить, какое именно представление вы хотите. (Например, если вы знаете, что значение всегда будет в BMP, вам может понадобиться фиксированное четырехзначное шестнадцатеричное представление с префиксом U+
, например "U+0020"
для пробела.) Однако это выходит за рамки этого вопроса, поскольку мы не знаем, каковы требования.
Более полным, хотя и более подробным, способом сделать это будет использование метода Character.codePointAt. Это будет обрабатывать символы с высоким суррогатом, которые не могут быть представлены одним целым числом в пределах диапазона, который может представлять char
.
В приведенном ниже примере строго не требуется - если символ (Unicode) может помещаться внутри одного (Java) char
(например, локальной переменной registered
), он должен находиться в пределах \u0000
до \uffff
, и вам не нужно беспокоиться о суррогатных парах. Но если вы посмотрите на потенциально более высокие точки кода из массива String/char, вызов этого метода будет разумным, чтобы покрыть случаи краев.
Например, вместо
String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;
использование
String input = ...;
int codePoint = Character.codePointAt(input, 4);
В этом случае этот код немного меньше, но он будет обрабатывать обнаружение суррогатных пар для вас.
В Java char является технически "16-разрядным целым числом", поэтому вы можете просто передать его в int, и вы получите код. Из Oracle:
Тип данных char - это один 16-разрядный символ Юникода. Оно имеет минимальное значение '\ u0000' (или 0) и максимальное значение '\ uffff' (или 65 535 включительно).
Итак, вы можете просто перенести его в int.
char registered = '®';
System.out.println(String.format("This is an int-code: %d", (int) registered));
System.out.println(String.format("And this is an hexa code: %x", (int) registered));
Дорогой друг, Джон Скит сказал, что вы можете найти символ Десятичный код, но это не символ Hex-кода, как следует упомянуть в unicode, поэтому вы должны представлять коды символов через HexCode не в Deciaml.
есть инструмент с открытым исходным кодом в http://unicode.codeplex.com, который предоставляет полную информацию о characer или sentece.
поэтому лучше создать синтаксический анализатор, который дает char в качестве параметра и возвращает ahexCode как строку
public static String GetHexCode(char character)
{
return String.format("{0:X4}", GetDecimal(character));
}//end
надеюсь, что это поможет
Для меня только "Integer.toHexString(зарегистрированный)" работал так, как я хотел:
char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));
Этот ответ даст вам только строковые представления, которые обычно представлены в таблицах. Ответ Джона Скита объясняет больше.