Obtenir la valeur unicode d'un caractère

y a-t-il un moyen en Java pour que je puisse obtenir L'équivalent Unicode de n'importe quel caractère? par exemple

supposons une méthode getUnicode(char c) . Un appel getUnicode('÷') doit renvoyer u00f7 .

60
demandé sur Andrew Thompson 2010-02-08 11:42:00

7 réponses

vous pouvez le faire pour N'importe quel Java char en utilisant le liner ici:

System.out.println( "\u" + Integer.toHexString('÷' | 0x10000).substring(1) );

Mais c'est seulement à travailler pour l'Unicode des caractères d'Unicode 3.0, c'est pourquoi j'ai précisé que vous pourriez faire pour Java char.

parce que Java a été conçu bien avant L'arrivée D'Unicode 3.1 et donc la primitive char de Java est inadéquate pour représenter Unicode 3.1 et plus: il n'y a plus de mappage "un caractère Unicode pour un char Java" (au lieu d'un monstre) hack est utilisé).

donc vous devez vraiment vérifier vos exigences ici: Avez-vous besoin de soutenir Java char ou un caractère Unicode possible?

51
répondu SyntaxT3rr0r 2010-02-08 09:13:01

si vous avez Java 5, utilisez char c = ...; String s = String.format ("\u%04x", (int)c);

si votre source n'est pas un caractère Unicode ( char ) mais une chaîne de caractères, vous devez utiliser charAt(index) pour obtenir le caractère Unicode à la position index .

N'utilisez pas codePointAt(index) car cela donnera des valeurs de 24 bits (Unicode complet) qui ne peuvent pas être représentées avec seulement 4 chiffres hexadécimaux (il faut 6). Voir les docs pour une explication .

[EDIT] To précisez: cette réponse n'utilise pas Unicode mais la méthode que Java utilise pour représenter les caractères Unicode (c.-à-d. les paires de substitution) puisque char est de 16 bits et Unicode est de 24 bits. La question devrait être: "Comment puis-je convertir char en un nombre hexadécimal à 4 chiffres", puisque ce n'est pas (vraiment) à propos D'Unicode.

33
répondu Aaron Digulla 2010-02-08 12:30:32
private static String toUnicode(char ch) {
    return String.format("\u%04x", (int) ch);
}
10
répondu Yogesh Dubey 2013-08-07 08:20:01
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
5
répondu Deepak Sharma 2017-02-01 12:50:08

j'ai trouvé ce joli code sur le web.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Unicode {

public static void main(String[] args) {
System.out.println("Use CTRL+C to quite to program.");

// Create the reader for reading in the text typed in the console. 
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

try {
  String line = null;
  while ((line = bufferedReader.readLine()).length() > 0) {
    for (int index = 0; index < line.length(); index++) {

      // Convert the integer to a hexadecimal code.
      String hexCode = Integer.toHexString(line.codePointAt(index)).toUpperCase();


      // but the it must be a four number value.
      String hexCodeWithAllLeadingZeros = "0000" + hexCode;
      String hexCodeWithLeadingZeros = hexCodeWithAllLeadingZeros.substring(hexCodeWithAllLeadingZeros.length()-4);

      System.out.println("\u" + hexCodeWithLeadingZeros);
    }

  }
} catch (IOException ioException) {
       ioException.printStackTrace();
  }
 }
}

Article Original

0
répondu Chathuranga Chandrasekara 2010-02-08 08:45:11

êtes-vous difficile avec L'utilisation D'Unicode parce qu'avec java son plus simple si vous écrivez votre programme pour utiliser la valeur "dec" ou (code HTML), alors vous pouvez tout simplement cast types de données entre char et int

char a = 98;
char b = 'b';
char c = (char) (b+0002);

System.out.println(a);
System.out.println((int)b);
System.out.println((int)c);
System.out.println(c);

donne cette sortie

b
98
100
d
0
répondu Jordan Doerksen 2015-02-26 03:33:59

tout d'abord, je vois le haut du char. Après, obtenir le bas côté. Convertissez toutes les choses en HexString et mettez le préfixe.

int hs = (int) c  >> 8;
int ls = hs & 0x000F;

String highSide = Integer.toHexString(hs);
String lowSide = Integer.toHexString(ls);
lowSide = Integer.toHexString(hs & 0x00F0);
String hexa = Integer.toHexString( (int) c );

System.out.println(c+" = "+"\u"+highSide+lowSide+hexa);
0
répondu Josiel Novaes 2015-04-12 22:13:31