IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Comment afficher le code Unicode d'un caractère et faire l’opération inverse ?


Sujet :

Java

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut Comment afficher le code Unicode d'un caractère et faire l’opération inverse ?
    Salut,

    Comment afficher le code Unicode d'un caractère et faire l’opération inverse ?

    Pour l'instant je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ClassMain {
     
        public static void main(String[] args) {
     
            int a = 66 ; //66 = 0x0042;        
            System.out.println("le caractère correspondant est : "+ (char) a);           
        }
    }
    J’obtiens ceci : le caractère correspondant est : B

    Et pour l'inverse je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ClassMain {
     
        public static void main(String[] args) {       
     
            char myC = 'B';
            System.out.print("le code Unicode correspondant est : " + (int) myC);    
         }
    }
    J’obtiens ceci : le code Unicode correspondant est : 66

    -----------------
    Mais j'aimerais savoir si il y a une meilleure façon de faire cela ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je ne suis pas sûr de ce que tu appelles "meilleur." Tu n'es pas obligé de l'afficher pour que ça marche, en tout cas.

    Pour obtenir le code Unicode d'un caractère il faut le cast ou le convertir implicitement en int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = 'B';
    int codePoint = c;
    Pour obtenir le caractère correspondant à un code Unicode, et en supposant qu'on se restreigne aux cas simples, il faut le cast en char :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int codePoint = 66;
    char c = (char)codePoint;
    Je vois pas ce qu'on peut espérer de mieux.


    ... À la rigueur, codepoint vers caractère risque d'échouer. Parce qu'un char ne fait que 16 bits, il ne peut contenir que les caractères de 0 à 0xFFFF. Les suivants ça ne tient pas dans un seul char, il faut les mettre dans un String. Du coup il y a trois cas de figure :

    - on sait qu'on n'aura jamais de caractère en-dessous de 0 ni au-delà de 0xFFFF et que si on en a quand même c'est normal que ça fasse n'importe quoi (ce qui implique, notamment, que l'on ne s'en serve pas pour "exécuter des commandes" et donc qu'il n'y ait pas de faille de sécurité si ça fait n'importe quoi.) Dans ce cas on fait comme j'ai montré.

    - il y a un risque qu'on ait des caractères au-delà de 0xFFFF mais si ça arrive ce n'est pas normal et on veut faire une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int codePoint = 66;
    if(!Character.isValidCodePoint(codePoint) || Character.charCount(codePoint) != 1) {
      throw new IllegalArgumentException("Invalid BMP code point: " + codePoint);
    }
    char c = (char)codePoint;
    - on peut avoir des codepoints au-delà de 0xFFFF et on veut les gérer correctement. Dans ce cas on ne peut pas utiliser juste un char, mais plutôt un char[] ou une String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int codePoint = 66;
    char[] chars = Character.toChars(codePoint);
    Le tableau sera de taille 1 en général, taille 2 pour les codePoints au-delà de 0xFFFF.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    + 1 et résolu.

    Merci pour l'explication.

    PS : Pour ceux que cela intéresserait dans l'autre fil deux autres possibilités ont été données :

    Citation Envoyé par joel.drigo Voir le message
    Pour avoir la valeur que tu attendais, il fallait faire : System.out.println(Integer.toString('B',16)); ou System.out.println(Integer.toHexString('B'));.
    Le petit plus c'est qu'on peut choisir la base...




  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Enfin, c'est pas tout à fait la même question : dans l'autre fil, tu cherchais à afficher la valeur en hexadécimal (tu voulais obtenir 42 pour 'B'). Ici, tu cherchais juste à passer du codepoint au char, et vice versa.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Oui c'est vrai, ici en plus on récupère un string et non un int.

    Ça peut être utile aussi... Par exemple si je veux afficher un tableau de caractères avec leur codePoint en hexadécimal.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    A Bourg Saint Andéol
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : A Bourg Saint Andéol
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Trouver les codes Unicode et ANSI (ASCII) d'un caractère dans un fichier.
    Bonjour,

    J'ai trouvé un "truc" qui permet de tout savoir sur un caractère, même caché, même sans autres infos.

    J'ai constitué un fichier tableau des caractères unicode de U+0000 à U+37FF, (On peut aller plus loin au besoin) à partir de http://ascii-table.com/unicode-chars.php?p=0 sur un fichier Word.

    D'autres sites sont possibles et d'autres supports aussi.

    On affiche le fichier qui contient le caractère, visible ou non, on sélectionne le caractère seul et avec l'outil rechercher de Word, on le recherche dans le tableau précédent.

    Avec le tableau, on obtient les divers noms Unicodes du caractères: U+wxyz.

    On colle ds le navigateur Internet: http://ascii-table.com/info.php?u=wxyz. On efface le point final de l'extérieur, cad, après le point.

    Et on a les infos sur le caractère.

    Al

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben... Autant utiliser directement les sites en question je dirais...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Candidat au Club
    Homme Profil pro
    programation
    Inscrit en
    Juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : programation

    Informations forums :
    Inscription : Juin 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut autre manière
    System.out.println(String.format("decimal ---> hexadecimal %x",960));
    System.out.println(String.format("hexadecimal---> caractere %s",'\u03c0'));
    System.out.println(String.format("hexadecimal---> decimal %d",(int)'\u03c0'));
    System.out.println(String.format("decimal ---> octet %o",960));

    il a plusieurs façon
    pour le Unicode vous trouver ici
    https://unicode-table.com/fr/


    bon chance

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ... Pourquoi pas simplement 0x3c0 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Candidat au Club
    Homme Profil pro
    programation
    Inscrit en
    Juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : programation

    Informations forums :
    Inscription : Juin 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    oui ça marche

    System.out.println((char)0x0d5);
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/03/2008, 11h04
  2. Comment afficher du code ?
    Par nocoment dans le forum Mise en forme
    Réponses: 2
    Dernier message: 18/06/2007, 11h34
  3. [AJAX] Base - Comment afficher du code html
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2007, 13h47
  4. Comment récupérer le code ASCII d'un caractère?
    Par Blue_Strike dans le forum Delphi
    Réponses: 6
    Dernier message: 04/05/2007, 00h38
  5. Réponses: 9
    Dernier message: 14/11/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo