Comment obtenir le code UTF8 d'un caractère en Java? J'ai le caractère 'a' et je veux la valeur 97 J'ai le caractère 'et' et la valeur 233
voici un tableau pour plus de valeurs
J'ai essayé Character.getNumericValue(a)
mais pour un il me donne 10 et non 97, aucune idée pourquoi?
Cela semble très basique mais toute aide serait la bienvenue!
char
est en fait un type numérique contenant la valeur unicode (UTF-16, pour être exact - vous avez besoin de deux char
s pour représenter des caractères hors BMP) du caractère. Vous pouvez tout faire avec une variable int
.
Character.getNumericValue()
essaie d'interpréter le caractère sous forme de chiffre.
Vous pouvez utiliser la méthode codePointAt (int index) de Java.lang.String pour cela. Voici un exemple:
"a".codePointAt(0) --> 97
"é".codePointAt(0) --> 233
Si vous souhaitez éviter de créer inutilement des chaînes, les opérations suivantes fonctionnent également et peuvent être utilisées pour les tableaux de caractères:
Character.codePointAt(new char[] {'a'},0)
Ces codes "UTF-8" ne sont pas pareils. En réalité, ce ne sont que des valeurs Unicode, conformément aux graphiques de code Unicode .
Donc, un 'é' est en fait U + 00E9 - en UTF-8, il serait représenté par deux octets {0xc3, 0xa9}.
Maintenant, pour obtenir la valeur Unicode - ou pour être plus précis, la valeur UTF-16, comme c'est ce que Java utilise en interne - vous devez simplement convertir la valeur en entier:
char c = '\u00e9'; // c is now e-acute
int i = c; // i is now 233
Cela produit un bon résultat:
int a = 'a';
System.out.println(a); // outputs 97
Également:
System.out.println((int)'é');
imprime 233
.
Ma méthode pour le faire est quelque chose comme ceci:
char c = 'c';
int i = Character.codePointAt(String.valueOf(c), 0);
// testing
System.out.println(String.format("%c -> %d", c, i)); // c -> 99
Votre question n'est pas claire. Voulez-vous le point de code Unicode pour un caractère particulier (qui est l'exemple que vous avez donné) ou voulez-vous traduire un point de code Unicode en une séquence d'octets UTF-8?
Si c'est le cas, je recommande les diagrammes de code sur http://www.unicode.org/
Si ce dernier, alors le programme suivant le fera:
public class Foo
{
public static void main(String[] argv)
throws Exception
{
char c = '\u00E9';
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStreamWriter out = new OutputStreamWriter(bos, "UTF-8");
out.write(c);
out.flush();
byte[] bytes = bos.toByteArray();
for (int ii = 0 ; ii < bytes.length ; ii++)
System.out.println(bytes[ii] & 0xFF);
}
}
(Il y a aussi une page en ligne Unicode vers UTF8, mais je n'ai pas l'URL sur cette machine)
Il existe une bibliothèque open source MgntUtils qui a une classe Utility StringUnicodeEncoderDecoder. Cette classe fournit des méthodes statiques qui convertissent n'importe quelle chaîne en séquence Unicode et inversement. Très simple et utile. Pour convertir String, il suffit de:
String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);
Par exemple, une chaîne "Hello World" sera convertie en
"\ u0048\u006c\u006c\u006c\u006f\u0020f. u
Cela fonctionne avec n'importe quelle langue. Voici le lien vers l'article qui explique toutes les explications sur la bibliothèque: MgntUtils . Recherchez le sous-titre "Convertisseur de chaînes Unicode". L'article vous donne un lien vers Maven Central où vous pouvez obtenir des artefacts et un github où vous pouvez obtenir le projet lui-même. La bibliothèque est livrée avec du code source javadoc et bien écrit.
Vous pouvez créer une simple boucle pour répertorier tous les caractères UTF-8 disponibles, comme ceci:
public class UTF8Characters {
public static void main(String[] args) {
for (int i = 12; i <= 999; i++) {
System.out.println(i +" - "+ (char)i);
}
}
}