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

API standards et tierces Java Discussion :

[String]Comment etendre le mon Code ASCII??


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut [String]Comment etendre le mon Code ASCII??
    Re Salut :p

    Voila j'ai reussi a decoder mon String (qui est une representation hexa) et je voudrai le convertir en Texte. Jusque la tout va bien le probleme est que j'ai des caracteres qui ont des valeurs superieure à 128 et du coup à la conversion en ASCII ca me fait n'importe quoi.

    Par exemple, j'ai le code 138 ( = 0x8a) et qui normalement correspond en ASCII 'è' et mon programme m'affiche '?' apres analyse du probleme j'ai trouve que mon programme encodait sur 7 bits soit jusqu'a 128 or je possede des valeurs qui vont jusqu'a 256

    Donc ma question est la suivante comment faire pour etendre mon code ASCII et pouvoir encoder sur 8bits au lieu de 7??

    Voila mon code (on sait jamais :p )

    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
     
     
     
    public char[] StringToBytes(String string) 
        {       
            char [] tab_encode = new char[string.length()/2];
            int[] tab_encode_tmp = new int[string.length()/2];
            int cpt=0;        
            for (int i = 0; i < tab_encode.length; i++) 
            {
                tab_encode_tmp[i] = Integer.parseInt(string.substring(cpt,cpt+2),16);
                tab_encode[i]=(char)tab_encode_tmp[i];
                cpt+=2;
            }  
            return tab_encode;
    J'ai Vraiment besoin de votre aide

    Merci de vos reponses

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    bonsoir,
    tu es sûr que 138 correspond à 'è', moi j'ai 232 ( = 0xe8). Sinon, dans ta méthode, pourquoi allouer un tableau temporaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public char[] StringToBytes(String string) {        
      char[] chars = new char[string.length()/2]; 
     
      for (int i = 0, cpt = 0; i < chars.length; i++, cpt += 2) {
          chars[i] = (char) Integer.parseInt(string.substring(cpt, cpt+2), 16);
      }  
      return chars; 
    }

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    merci de ta reponse je vais essayer

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Salut...

    Si je ne me trompe pas, les valeurs decimales des characteres en ASCII sont "centrees" sur 0, c'est a dire qu'elle vont de -128 a 127, (ou -127 a 128, je ne sais plus...)

    Du coup, quand tu as des valeurs superieures a 128, il faut le recentrer...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    et comment faut faire??

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    tes codes vont de 0 à 256 ? alors retire 128 et tu seras centré sur 0

  7. #7
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    oui mes code vont de à à 255!
    est ce que tu pourrais me montrer un exemple je voit pas ou retirer les 128 :s

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    je en comprends pas trop cette histoire de "recentrage". Les char sont codés sur deux octets non signés en respect de la norme Unicode, donc leur domaine de valeur s'étend de 0 à 65535.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    t'as bien un tableau de char, d'après ce que j'ai compris ?
    alors c'est la valeur de ces char que tu dois transposer ... enfin c'est ce que j'ai compris.

  10. #10
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    en fait j'ai un string qui est une representation hexa donc un truc du genre : 2375000b233400010005080002238a0503

    et donc moi je veux convertir ca en char et pour ca je parse mon string 2 à 2, le probleme vient du fait que lorsque j'arrive à 8a qui est egale à 138 il me met n'importe quoi parce que le code ascii va de 0 à 127 et donc moi je voulais savoir comment faire pour qu'il me le convertisse correctement.

    j'ai essayer de retirer 128 à la valeur comme vous me l'avez conseiller mais du coup je me retrouve avec plein de valeur negative et du coup à la conversion c encore pire!!

    comment faire :'(

  11. #11
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonjour,

    Essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tonHexa = tonHexa > 127 ? tonHexa - 256 : tonHexa;
    Ca transformera les nombres de 0 à 255 en nombre de -128 à 127 (en complément à deux).

    Non garantie !

    bon courage.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    non ca marche toujours pas

  13. #13
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    re,

    Sinon il y a cette méthode dans la classe Character :

    static char forDigit(int digit, int radix)
    Determines the character representation for a specific digit in the specified radix.
    bon courage.

  14. #14
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par lanfeustdetroll
    et donc moi je veux convertir ca en char et pour ca je parse mon string 2 à 2, le probleme vient du fait que lorsque j'arrive à 8a qui est egale à 138 il me met n'importe quoi parce que le code ascii va de 0 à 127 et donc moi je voulais savoir comment faire pour qu'il me le convertisse correctement.
    Désolé, mais 8a ne correspond à rien en Unicode. As tu essayé la méthode que je t'avais donné plus haut dans la discussion ?

  15. #15
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    oui j'ai essayer mais ca marche toujours pas

    concernant le 8a ca correspond à un caractere que je peu pas dessiner

    par contre on le trouve sur cette page :

    http://www.idevelopment.info/data/Pr...ii_table.shtml

  16. #16
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Pour le code 138, j'ai un 'Š'. (avec mon Windows)
    C'est vrai qu'avec ça, on a un '?' pour i de 128 à 159
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Test {
      public static void main(String[] args) {
        for (int i=32; i<255; i++)
          System.out.println(i + " -> " + (char) i);
      }
    }
    C'est pe juste juste un problème d'affichage ?

  17. #17
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Effectivement, j'ai aussi un 'Š', mais dans le jeu de caractères "Windows : Europe Centrale" qui doit correspondre à de l'ASCII étendu donné par le lien de lanfeustdetroll. Par contre, en jeu de caractères Unicode, ça ne correspond à rien. Or, à ma connaissance, les méthodes d'E/S de Java utilisent le jeu de caractères Unicode. Sinon, il doit falloir utiliser un encodeur/décodeur spécifique. Jette un coup d'oeil au constructeur suivant de la classe String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String(byte bytes[], String charsetName);
    et à la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.nio.charset.Charset

  18. #18
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    est ce que t'aurai un petit exemple par hasard parce que je lutte un peu

    merci bokou

  19. #19
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    j'ai essayer d'une autre facon mais ca marche toujours pas l ne me donne pas le bon code ASCII

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static byte[] getEncodingBytes(String str) { 
          byte[] tab;       
     
          final String ENCODING_TYPE="ISO8859_1"; 
          try { 
             tab=str.getBytes(ENCODING_TYPE);
          } catch (UnsupportedEncodingException ex) { 
             ex.printStackTrace(); 
             throw new RuntimeException("ERROR : "+ENCODING_TYPE+" not supported !"); 
          }
          return tab; 
       }
    je sais plus quoi faire y aurait il un sauveur parmi vous

  20. #20
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Et comme ça, c'est pas mieux ?

    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
    public String bytesToString(String string) {        
      char[] chars = new char[string.length()/2]; 
     
      for (int i = 0, cpt = 0; i < chars.length; i++, cpt += 2) { 
          chars[i] = (char) Integer.parseInt(string.substring(cpt, cpt+2), 16); 
      }  
      return new String(chars); 
    } 
     
     
    public static byte[] getEncodingBytes(String str) {
    ...
    }
     
    String s = new String(getEncodingBytes(bytesToString("2375000b233400010005080002238a0503")));

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment savoir si mon code est valide ?
    Par supertino7 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 31/10/2008, 09h22
  2. Comment mieux sécuriser mon code ?
    Par bolo dans le forum ASP.NET
    Réponses: 17
    Dernier message: 11/05/2007, 07h05
  3. Comment rendre inaccessible mon code ?
    Par peter27x dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 03/04/2007, 08h39
  4. CSS comment puis-je modifier mon code pr avoir un bord blanc
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 30/09/2005, 20h19
  5. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04

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