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

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

char registered = '®';

или umlaut, или безотносительно unicode символ. Как я мог получить его код?

63
задан George Stocker 5 January 2010 в 14:20
поделиться

3 ответа

Просто конвертируйте его в int:

char registered = '®';
int code = (int) registered;

На самом деле существует неявное преобразование из char в int, так что вам не нужно указывать его явно, как я делал это выше, но я бы сделал это в данном случае, чтобы было понятно, что вы пытаетесь сделать.

Это даст кодовую единицу UTF-16 - то же самое, что и точка кодирования Юникода для любого символа, определенного в Базовой Многоязычной Плоскости. (И только символы BMP могут быть представлены в виде значений char на Java). Как говорит Анджей Дойл, если Вы хотите, чтобы точка кода Юникода была из произвольной строки, используйте Character.codePointAt().

Как только Вы получите единицу кода UTF-16 или точки кода Юникода, но которые являются целыми числами, это зависит от того, что Вы с ними сделаете. Если Вы хотите строковое представление, Вам нужно решить, какое именно вид представления Вы хотите. (Например, если Вы знаете, что значение всегда будет в BMP, Вам может понадобиться фиксированное 4-значное шестнадцатеричное представление с префиксом U+, например, "U+0020" для пробела). Однако это выходит за рамки данного вопроса, так как мы не знаем, каковы требования.

.
105
ответ дан 24 November 2019 в 16:13
поделиться

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

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

.
34
ответ дан 24 November 2019 в 16:13
поделиться

дорогой друг, Джон Скит сказал, что вы можете найти десятичный код символа, но это не шестнадцатеричный код символа, который следует упоминать в юникоде, поэтому вы должны представлять символьные коды через шестнадцатеричный код, а не в десятичный код.

есть инструмент с открытым исходным кодом на http://unicode.codeplex.com , который предоставляет полную информацию о персонаже или предложении.

, поэтому лучше создать синтаксический анализатор, который дает char в качестве параметра и возвращает ahexCode в виде строки

public static String GetHexCode(char character)
    {
        return String.format("{0:X4}", GetDecimal(character));
    }//end

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

0
ответ дан 24 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: