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 :

Convertir un texte en ANSI


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2010
    Messages : 33
    Par défaut Convertir un texte en ANSI
    Bonjour,

    J'ai un tableau d'hexadecimal que je dois convertir en String ANSI, et je voudrai savoir si c'est possible de faire ça ?

    Les solutions que j'ai trouvé sur le net permettent de convertir un text "ANSI" en "UTF_8" ou "ascci" mais pas l'incerse

    Merci d'avance pour votre aide !

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    On sait faire tous les genres de conversion.

    Mais
    - c'est quoi au juste, un "tableau d'hexadécimal" ?
    - Une String n'est pas ANSI ou quoi que ce soit de ce genre. Une String n'a pas d'encodage. C'est du texte, des lettres, des chiffres et des symboles. Ça a pas d'encodage, les lettres, les chiffres et les symboles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2010
    Messages : 33
    Par défaut
    Merci pour ta réponse.

    Voila le code que j'utilise pour convertir ma chaîne d'hexa en String:
    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
    19
    20
    21
    public static String decodeHexString(String hexText) {
     
    		  String decodedText=null;
    		  String chunk=null;
     
    		  if(hexText!=null && hexText.length()>0) {
    		  int numBytes = hexText.length()/2;
     
    		  byte[] rawToByte = new byte[numBytes];
    		  int offset=0;
     
    		  for(int i =0; i <numBytes; i++) {
    			  chunk = hexText.substring(offset,offset+2);
    			  offset+=2;
    			  rawToByte[i] = (byte) (Integer.parseInt(chunk,16) & 0x000000FF);
    		  }
    			  decodedText= new String(rawToByte);
    		  }
     
    		  return decodedText;
    		  }
    Sauf que dans le résultat obtenue un haxa "81" est convertie en "?" et quand je convertit "?" en hexa ça me retourne "3f". En cherchant j'ai compris que je dois utiliser l'encodage ANSI pour pouvoir convertir les bytes > 128 si je ne dis pas de bêtises

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ta méthode est pratiquement correcte.

    Il faut remplacer

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(rawToByte, leCharsetDesOctets);
    comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(rawToByte, "windows-1252");
    si les octets sont en ANSI.

    À part ça c'est correct.
    La ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rawToByte[i] = (byte) (Integer.parseInt(chunk,16) & 0x000000FF);
    peut être simplifiée en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rawToByte[i] = (byte) Integer.parseInt(chunk,16);
    puisque le cast vers byte fait exactement le même mask de toute façon.

    De plus, c'était pas la peine de le coder toi-même, tu aurais pu juste prendre la bibliothèque Apache Commons Codec.

    Citation Envoyé par safi11 Voir le message
    Sauf que dans le résultat obtenue un haxa "81" est convertie en "?" et quand je convertit "?" en hexa ça me retourne "3f". En cherchant j'ai compris que je dois utiliser l'encodage ANSI pour pouvoir convertir les bytes > 128 si je ne dis pas de bêtises
    Euh, en principe oui, mais l'hexa 81 n'a pas de sens en ANSI. Du coup, Java ne peut pas lui associer un caractère, et il met ? à la place, c'est logique.
    Tu es sûr que c'est de l'ANSI ? On peut le voir, cet hexa qui pose problème ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2010
    Messages : 33
    Par défaut
    Je crois que je n'ai pas bien compris la différence entre ANSI, ASCII...

    je prend par exemple l'hexa:"81da" que je converti avec la fonction decodeHexString, j'ai le résultat suivant: ?Ú
    Et si je convertit le "?Ú" en hexa j'ai le résultat: "3fda" !

    Merci pour ton aide

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par safi11 Voir le message
    Je crois que je n'ai pas bien compris la différence entre ANSI, ASCII...
    C'est sans rapport avec le problème, je pense.

    Citation Envoyé par safi11 Voir le message
    je prend par exemple l'hexa:"81da" que je converti avec la fonction decodeHexString, j'ai le résultat suivant: ?Ú
    Et si je convertit le "?Ú" en hexa j'ai le résultat: "3fda" !
    Comme je te l'ai dit, l'hexa 81 n'a pas de sens en ANSI (et encore moins en ASCII puisqu'il est supérieur à 7f). Quand tu lui demandes d'en faire un caractère il ne sait pas quoi en faire, donc il remplace par un point d'interrogation. L'hexa 81 est perdu, parce qu'on ne peut pas le convertir en caractère.
    Et le code ANSI hexadécimal d'un ? est 3f
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. convertir un fichier texte en ANSI
    Par sculpteur dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 08/10/2007, 11h38
  2. [Texte] convertir un OEM en ANSI
    Par cafeine dans le forum Contribuez
    Réponses: 0
    Dernier message: 20/08/2007, 15h18
  3. [MS-DOS] Une commande DOS pour convertir un texte en OEM
    Par Furius dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 30/12/2005, 19h47
  4. convertir le text de DBedit vers PAnsiChar ?
    Par _alex_ dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2005, 14h44
  5. Convertir un texte en OEM avec Notepad++
    Par Furius dans le forum Autres Logiciels
    Réponses: 17
    Dernier message: 17/10/2005, 13h18

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