Imprimer un caractère unicode en java


L'affichage du caractère unicode en java montre "?" signer. Par exemple, j'ai essayé d'imprimer "अ". Son numéro unicode est U+0905 et la représentation html est "अ". Les codes ci-dessous imprime "?"au lieu du caractère unicode.

char aa = '\u0905';
String myString = aa + " result" ;
System.out.println(myString); // displays "? result"

Existe-t-il un moyen d'afficher le caractère unicode directement à partir de unicode lui-même sans utiliser de nombres unicode? j'.e "अ" est enregistré dans le fichier maintenant afficher le fichier jsp.

Author: Razib, 2017-07-03

3 answers

Essayez d'utiliser le jeu de caractères utf8 -

        Charset utf8 = Charset.forName("UTF-8");
        Charset def = Charset.defaultCharset();

        String charToPrint = "u0905";

        byte[] bytes = charToPrint.getBytes("UTF-8");
        String message = new String(bytes , def.name());

        PrintStream printStream = new PrintStream(System.out, true, utf8.name());
        printStream.println(message); // should print your character
 2
Author: Razib, 2017-07-03 06:04:47

Votre variable myString contient la valeur parfaitement correcte. Le problème doit être la sortie de System.out.println(myString), qui est d'envoyer des octets de sortie pour afficher les glyphes que vous voulez voir.

System.out est un PrintStream utilisant le "codage par défaut de la plate - forme" pour convertir des caractères en séquences d'octets-peut-être que votre plate-forme ne prend pas en charge ce caractère. Par exemple, sur mon ordinateur Windows 7 en Allemagne, l'encodage par défaut est CP1252, et il n'y a pas de séquence d'octets dans cet encodage qui correspond à votre personnage.

Ou peut-être que l'encodage est correct, mais simplement la police qui crée des glyphes graphiques à partir de caractères n'a pas ce caractère.

Si vous envoyez votre sortie à un CMD Windows.Fenêtre EXE, alors peut-être que les deux raisons s'appliquent.

Mais soyez assuré, votre chaîne est correcte, et si vous l'envoyez à une destination qui peut la gérer (par exemple un Swing JTextField), elle apparaîtra correctement.

 1
Author: Ralf Kleberhoff, 2017-07-03 15:20:49

Java définit deux types de flux, octet et caractère.

La principale raison pour laquelle le système.hors.println () ne peut pas afficher les caractères Unicode est ce système.hors.println () est un flux d'octets qui ne traite que les huit bits de caractère de faible ordre qui sont de 16 bits.

Pour traiter les caractères Unicode(caractère Unicode 16 bits), vous devez utiliser un flux basé sur les caractères, c'est-à-dire PrintWriter.

PrintWriter prend en charge les méthodes print( ) et println (). Ainsi, vous pouvez utiliser ces méthode de la même manière que vous les avez utilisés avec le Système.hors.

PrintWriter printWriter = new PrintWriter(System.out,true);
char aa = '\u0905';
printWriter.println("aa = " + aa);
 1
Author: Mohammed Tamimi, 2018-08-05 21:27:01