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

Langage Java Discussion :

Obtenir Code ASCII


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut Obtenir Code ASCII
    Bonjour,

    Dans la tabe des codes ascii, il ya des caractères dupliqués,
    par exemple le caractère 'ˆ' a deux codes ascii 136 et 710

    renvoie 710 et je veux obtenir 136.

    Apparemment 710 est en Unicode et 136 est en ASCII, je veux avoir la représentation ASCII. Est ce qu'il ya un truc à préciser comme le charset : soit UTF-8,Unicode , ISO...

    comment faire?


    Merci.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Commençons par signaler que ni 136 ni 710 n'ont la moindre chance d'être des codes ASCII. ASCII va de 0 à 127.

    Je confirme que 710 est le code Unicode du caractère 'ˆ'.
    Je confirme que ce caractère, dans d'autre charsets, a le code 136. Par exemple dans le charset windows-1252, le plus commun chez nous.

    Est ce qu'il ya un truc à préciser comme le charset : soit UTF-8,Unicode , ISO...
    "Préciser" n'est pas le mot. Tu as un caractère et tu veux connaître son code windows-1252.

    Java n'a rien de prévu pour connaître facilement le code d'un caractère dans un charset précis. Il n'offre que des moyens de convertir String vers binaire dans un encodage précis, et vice-versa. Mais on peut s'en servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static int windows1252Of(char ch) {
      try {
        String s = new String(new char[] {ch});
        byte[] sBytes = s.getBytes("windows-1252");
        // windows-1252 encode tous ses caractères sur 1 octet,
        // et nous savons que notre String fait 1 caractère.
        // Donc le tableau fait 1 octet, et nous prenons cet octet.
        int code = sBytes[0] & 0xFF; // 0xFF parce qu'un byte va de -128 à 127, et qu'on veut le int de 0 à 255.
        return code;	        
      } catch(UnsupportedEncodingException e) {
        throw new IllegalStateException(e.getMessage(), e);
      }
    }
     
    public static void main(String[] args) {    
      int localCode = windows1252Of('ˆ');
      System.out.println(localCode);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    merci bq ça marche comme ça.

    j'ai trouvé entre temps une autre solution,

    Charset cs = Charset.forName("windows-1252");
    ByteBuffer b = cs.encode(String.valueOf('ˆ'));
    int code = b.get(0) & 0xFF

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Attention je pense pas que ce charset windows-1252 soit utilisable sous linux si jamais c'était important.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par _skip Voir le message
    Attention je pense pas que ce charset windows-1252 soit utilisable sous linux si jamais c'était important.
    non, il ne l'est pas

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    non, il ne l'est pas
    Ouaif, enfin c'est plus ou moins l'ISO-8859-1
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par sinok Voir le message
    Ouaif, enfin c'est plus ou moins l'ISO-8859-1
    Oui, et puis tu découvre, ho surprise, que quand tu décode du cp1252 comme de l'ISO-8859-1 et que tu transfère ça vers de l'UTF-8, t'as le converter utf-8 qui se plaint que tu utilise des caractères qui n'existent pas.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Attention avec vos solutions, car de base cela va remplacer les caractères inconnu par une valeur par défaut, ce qui n'est peut-être pas souhaitable.

    Pour éviter cela il faut passer par les CharsetEncoder en le forcant à générer une erreur dans ces cas là.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static ByteBuffer getBytes(String str, Charset charset) throws CharacterCodingException {
    		CharsetEncoder encoder = charset.newEncoder();
    		encoder.onMalformedInput(CodingErrorAction.REPORT);
    		encoder.onUnmappableCharacter(CodingErrorAction.REPORT);
    		return encoder.encode(CharBuffer.wrap(str));
    	}

    a++

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

Discussions similaires

  1. [debutant] obtenir la représentation binaire d'un code ascii
    Par coco21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/11/2007, 10h06
  2. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 02h27
  3. Obtenir le code ascii d'un caractère
    Par patrick92100 dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 15/02/2007, 16h56
  4. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 14h04
  5. [TP]Code ASCII.
    Par franck H dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 18/01/2004, 20h28

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