Подтвердить что ты не робот

Как я могу получить код символа Юникода?

Скажем, у меня есть это:

char registered = '®';

или umlaut, или любой символ Unicode. Как я могу получить его код?

4b9b3361

Ответ 1

Просто преобразуйте его в 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" для пробела.) Однако это выходит за рамки этого вопроса, поскольку мы не знаем, каковы требования.

Ответ 2

Более полным, хотя и более подробным, способом сделать это будет использование метода 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);

В этом случае этот код немного меньше, но он будет обрабатывать обнаружение суррогатных пар для вас.

Ответ 3

В 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));

Ответ 4

Дорогой друг, Джон Скит сказал, что вы можете найти символ Десятичный код, но это не символ 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

надеюсь, что это поможет

Ответ 5

Для меня только "Integer.toHexString(зарегистрированный)" работал так, как я хотел:

char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));

Этот ответ даст вам только строковые представления, которые обычно представлены в таблицах. Ответ Джона Скита объясняет больше.