Как преобразовать кодовые страницы Unicode в их представление символов?

Как преобразовать строки, представляющие кодовые точки, в соответствующий символ?

Например, я хочу иметь функцию, которая получает U+00E4 и возвращает ä.

Я знаю, что в классе символов у меня есть функция toChars(int codePoint) которая принимает целое число, но нет функции, которая берет строку этого типа.

Есть ли встроенная функция или мне нужно сделать какое-то преобразование в строке, чтобы получить целое число, которое я могу отправить функции?

Ответ 1

Кодовые точки записываются как шестнадцатеричные числа с префиксом U+

Итак, вы можете сделать это

int codepoint=Integer.parseInt(yourString.substring(2),16);
char[] ch=Character.toChars(codepoint);

Ответ 2

"\u00E4"

new String(new int[] { 0x00E4 }, 0, 1);

Ответ 3

этот пример не использует char [].

// this code is Kotlin, but you can write same thing in Java
val sb = StringBuilder()
val cp :Int // codepoint
when {
    Character.isBmpCodePoint(cp) -> sb.append(cp.toChar())
    Character.isValidCodePoint(cp) -> {
        sb.append(Character.highSurrogate(cp))
        sb.append(Character.lowSurrogate(cp))
    }
    else -> sb.append('?')
}

Ответ 4

Переоборудован из Котлина:

    public String codepointToString(int cp) {
        StringBuilder sb = new StringBuilder();
        if (Character.isBmpCodePoint(cp)) {
            sb.append((char) cp);
        } else if (Character.isValidCodePoint(cp)) {
            sb.append(Character.highSurrogate(cp));
            sb.append(Character.lowSurrogate(cp));
        } else {
            sb.append('?');
        }
        return sb.toString();
    }

Ответ 5

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

int codepoint = ...;
char c = (char)codepoint;

Ответ 6

Вы можете распечатать их

s='\u0645\u0635\u0631\u064a'
print(s)