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
.
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?
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.
private static String toUnicode(char ch) {
return String.format("\\u%04x", (int) ch);
}
char c = 'a';
String a = Integer.toHexString(c); // gives you---> a = "61"
ê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
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();
}
}
}
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);