Comment convertir des chaînes représentant des points de code en caractères appropriés?
Par exemple, je veux une fonction qui obtient U+00E4
et retourne ä
.
Je sais que dans la classe de caractères, j'ai une fonction toChars(int codePoint)
qui prend un entier, mais il n'y a pas de fonction qui prend une chaîne de ce type.
Existe-t-il une fonction intégrée ou dois-je effectuer des transformations sur la chaîne pour obtenir le nombre entier que je peux envoyer à la fonction?
Les points de code sont écrits sous forme de nombres hexadécimaux préfixés par U+
Alors tu peux faire ça
int codepoint=Integer.parseInt(yourString.substring(2),16);
char[] ch=Character.toChars(codepoint);
"\u00E4"
new String(new int[] { 0x00E4 }, 0, 1);
Converti de Kotlin:
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();
}
cet exemple n'utilise pas 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('?')
}