Скажем, у меня есть это:
char registered = '®';
или umlaut
, или безотносительно unicode символ. Как я мог получить его код?
Просто конвертируйте его в int
:
char registered = '®';
int code = (int) registered;
На самом деле существует неявное преобразование из char
в int
, так что вам не нужно указывать его явно, как я делал это выше, но я бы сделал это в данном случае, чтобы было понятно, что вы пытаетесь сделать.
Это даст кодовую единицу UTF-16 - то же самое, что и точка кодирования Юникода для любого символа, определенного в Базовой Многоязычной Плоскости. (И только символы BMP могут быть представлены в виде значений char
на Java). Как говорит Анджей Дойл, если Вы хотите, чтобы точка кода Юникода была из произвольной строки, используйте Character.codePointAt()
.
Как только Вы получите единицу кода UTF-16 или точки кода Юникода, но которые являются целыми числами, это зависит от того, что Вы с ними сделаете. Если Вы хотите строковое представление, Вам нужно решить, какое именно вид представления Вы хотите. (Например, если Вы знаете, что значение всегда будет в BMP, Вам может понадобиться фиксированное 4-значное шестнадцатеричное представление с префиксом U+
, например, "U+0020"
для пробела). Однако это выходит за рамки данного вопроса, так как мы не знаем, каковы требования.
Более полным, хотя и более многословным, способом будет использование метода Character.codePointAt. Он будет обрабатывать "высокие суррогатные" символы, которые не могут быть представлены одним целым числом в диапазоне, который может представлять char
.
В приведенном примере это не является строго необходимым - если символ (Юникод) может поместиться внутри единственной (Java) char
(например, в локальной переменной зарегистрированной
), то он должен находиться в диапазоне от \u0000
до \uffff
, и вам не нужно будет беспокоиться о суррогатных парах. Но если вы смотрите на потенциально более высокие точки кода, изнутри массива String/char, то вызов этого метода будет мудрым для того, чтобы покрыть крайние регистры.
Например, вместо
String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;
используйте
String input = ...;
int codePoint = Character.codePointAt(input, 4);
В этом примере не только немного меньше кода, но и он будет обрабатывать обнаружение суррогатных пар для вас.
.дорогой друг, Джон Скит сказал, что вы можете найти десятичный код символа, но это не шестнадцатеричный код символа, который следует упоминать в юникоде, поэтому вы должны представлять символьные коды через шестнадцатеричный код, а не в десятичный код.
есть инструмент с открытым исходным кодом на http://unicode.codeplex.com , который предоставляет полную информацию о персонаже или предложении.
, поэтому лучше создать синтаксический анализатор, который дает char в качестве параметра и возвращает ahexCode в виде строки
public static String GetHexCode(char character)
{
return String.format("{0:X4}", GetDecimal(character));
}//end
надеюсь, что это поможет