web-dev-qa-db-fra.com

Obtenir la valeur unicode d'un caractère

Existe-t-il un moyen d'utiliser Java pour obtenir l'équivalent Unicode de n'importe quel caractère? par exemple.

Supposons une méthode getUnicode(char c). Un appel getUnicode('÷') devrait renvoyer \u00f7.

64
Saurabh

Vous pouvez le faire pour n'importe quel caractère Java en utilisant la doublure ici:

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

Mais cela ne fonctionnera que pour les caractères Unicode jusqu'à Unicode 3.0, c'est pourquoi j'ai précisé que vous pouviez le faire pour n'importe quel caractère Java.

Comme Java a été conçu bien avant l’arrivée de l’Unicode 3.1, la primitive char ne suffit pas à représenter Unicode 3.1 et plus: il n’ya plus de mappage «un caractère Unicode à un caractère Java» (au lieu d’un hack monstrueux).

Donc, vous devez vraiment vérifier vos exigences ici: devez-vous prendre en charge le char Java ou tout caractère Unicode possible? 

55
SyntaxT3rr0r

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, vous devez utiliser charAt(index) pour obtenir le caractère Unicode à la position index.

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

[EDIT] Pour que ce soit clair: cette réponse n’utilise pas Unicode, mais la méthode utilisée par Java pour représenter les caractères Unicode (c’est-à-dire les paires de substitution) puisque char est 16 bits et Unicode est 24 bits. La question devrait être: "Comment puis-je convertir char en un nombre hexadécimal à 4 chiffres", puisqu'il ne s'agit pas (vraiment) d'un Unicode.

33
Aaron Digulla
private static String toUnicode(char ch) {
    return String.format("\\u%04x", (int) ch);
}
12
Yogesh Dubey
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
5
Deepak Sharma

êtes-vous pointilleux avec l’utilisation de l’Unicode, car avec Java, c’est plus simple si vous écrivez votre programme en utilisant la valeur "dec" ou (HTML-Code), vous pouvez simplement convertir les 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
Jordan Doerksen

J'ai trouvé ce code Nice 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

Tout d’abord, j’ai le côté haut de l’omble. Après, prenez le côté bas. 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
Josiel Novaes