2010-12-01 8 views
10

Comment puis-je obtenir le code UTF8 d'un caractère en Java? J'ai le char « a » et je veux la valeur 97 J'ai le caractère « é » et je veux la valeur 233Obtenir la valeur char en java

ici est une table pour more values

J'ai essayé Character.getNumericValue(a) mais pour qu'il donne moi 10 et non 97, aucune idée pourquoi?

Cela semble très basique mais toute aide serait appréciée!

+0

Comment est-ce lié à UTF-8 (http://en.wikipedia.org/wiki/UTF -8)? 'é' en UTF-8 est '0xC3 0xA9'. – axtavt

Répondre

9

char est en fait un type numérique contenant la valeur unicode (UTF-16, pour être exact - vous avez besoin deuxchar s pour représenter les caractères en dehors du BMP) du caractère. Vous pouvez tout faire avec ce que vous pouvez faire avec un int.

Character.getNumericValue() essaie d'interpréter le caractère comme un chiffre.

4

Ce produit bon résultat:

int a = 'a'; 
System.out.println(a); // outputs 97 

De même:

System.out.println((int)'é'); 

imprime 233.

4

Ces codes "UTF-8" ne le sont pas. Ils sont en fait juste des valeurs Unicode, selon le Unicode code charts. Donc un 'é' est en réalité 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 - il vous suffit de convertir la valeur à un nombre entier:

char c = '\u00e9'; // c is now e-acute 
int i = c; // i is now 233 
+0

merci pour l'exemple! – Nick

1

Votre question est pas clair. Voulez-vous le codepoint Unicode pour un caractère particulier (qui est l'exemple que vous avez donné), ou voulez-vous traduire un codecode Unicode en une séquence d'octets UTF-8?

Si l'ancien, je vous recommande les cartes de code à http://www.unicode.org/

Dans ce dernier cas, le programme suivant 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 un Unicode en ligne à la page UTF8, mais Je n'ai pas l'URL sur cette machine)

8

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 voulez éviter de créer des chaînes inutilement, les travaux suivants aussi bien et peut être utilisé pour les tableaux char:

Character.codePointAt(new char[] {'a'},0) 
+0

Je me suis retrouvé ici car je ne pouvais pas croire qu'il n'y avait pas de méthode nommée codePoint qui prend un seul caractère: Character.codePoint ('a') ou un non c.codePoint() – user1708042

2

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 
0

Il y a une MgntUtils bibliothèque open source qui a une classe utilitaire StringUnicodeEncoderDecoder. Cette classe fournit des méthodes statiques qui convertissent n'importe quelle chaîne en séquence Unicode. Très simple et utile. Pour convertir la chaîne que vous venez de faire:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString); 

Par exemple, une chaîne "Bonjour tout le monde" sera converti en

« \ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064 "

Fonctionne avec n'importe quelle langue. Voici le lien vers l'article qui explique tous les détails de la bibliothèque: MgntUtils. Recherchez le sous-titre "Convertisseur String Unicode". L'article vous donne un lien vers Maven Central où vous pouvez obtenir des artefacts et github où vous pouvez obtenir le projet lui-même. La bibliothèque est livrée avec un javadoc et un code source bien écrits.

0

Vous pouvez créer une simple boucle à la liste 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); 
     } 
    } 
} 
Questions connexes