Ответ 1
Кодовые точки записываются как шестнадцатеричные числа с префиксом U+
Итак, вы можете сделать это
int codepoint=Integer.parseInt(yourString.substring(2),16);
char[] ch=Character.toChars(codepoint);
Как преобразовать строки, представляющие кодовые точки, в соответствующий символ?
Например, я хочу иметь функцию, которая получает U+00E4
и возвращает ä
.
Я знаю, что в классе символов у меня есть функция toChars(int codePoint)
которая принимает целое число, но нет функции, которая берет строку этого типа.
Есть ли встроенная функция или мне нужно сделать какое-то преобразование в строке, чтобы получить целое число, которое я могу отправить функции?
Кодовые точки записываются как шестнадцатеричные числа с префиксом U+
Итак, вы можете сделать это
int codepoint=Integer.parseInt(yourString.substring(2),16);
char[] ch=Character.toChars(codepoint);
"\u00E4"
new String(new int[] { 0x00E4 }, 0, 1);
этот пример не использует 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('?')
}
Переоборудован из Котлина:
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();
}
Самый простой способ, который я нашел до сих пор, - просто нарисовать код; если вы просто ожидаете одного символа в кодеге, то это может быть хорошо для вас.
int codepoint = ...;
char c = (char)codepoint;
Вы можете распечатать их
s='\u0645\u0635\u0631\u064a'
print(s)