web-dev-qa-db-fra.com

Comment convertir des points de code unicode en représentation de caractères?

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?

21
David Michael Gang

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);
21
Anirudha
"\u00E4"

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

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();
    }
1
Qubei

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('?')
}
1
tateisu