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

  1. #1
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    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
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    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
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    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

  7. #7
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Le problème c'est que je dois convertir mon hexa "81da" en String et l'envoyer à un autre programme, celui ci doit convertir le string en hexa et trouver le même résultat :"81da"
    ce qui n'est pas le cas avec mon code !

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par safi11 Voir le message
    Le problème c'est que je dois convertir mon hexa "81da" en String et l'envoyer à un autre programme, celui ci doit convertir le string en hexa et trouver le même résultat :"81da"
    Il est clair que ce n'est pas du texte, alors pourquoi le convertir en String ?
    Pourquoi pas en byte[] ?

    Si c'est quelque chose qu'un tiers t'impose parce qu'il est stupide, le principe est de construire la String non pas à partir d'un byte[], qui exige l'emploi d'un encodage, mais à partir d'un char[], qui n'en utilise pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char[] rawToChar = new char[numBytes];
     
    // ...
     
    rawToChar[i] = (char) Integer.parseInt(chunk,16);
     
    // ...
     
    decodedText= new String(rawToChar);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Toujours le même problème même en utilisant char[]

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par safi11 Voir le message
    Toujours le même problème même en utilisant char[]
    Sans doute parce que le tiers qui exige une String n'a pas fait en sorte qu'elle puisse transmettre des octets arbitraires, mais seulement du texte.

    Tu vas devoir définir un autre moyen pour échanger du binaire entre tes applications. Les String utilisées de cette façon, ça ne marche pas. Passe plutôt par un byte[].
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Tu vas devoir définir un autre moyen pour échanger du binaire entre tes applications. Les String utilisées de cette façon, ça ne marche pas. Passe plutôt par un byte[].
    Donc il n'y a aucune solution pour convertir mon tableau d'hexa en text correctement ? je ne suis pas obligé de passer par un string mais je dois pouvoir écrire le résultat dans un fichier !

    merci pour l'aide

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par safi11 Voir le message
    Donc il n'y a aucune solution pour convertir mon tableau d'hexa en text correctement ?
    Non, puisqu'il n'y a aucun moyen de l'interpréter comme du texte. Comme déjà dit, l'hexa 81 ne correspond à rien en texte.

    Citation Envoyé par safi11 Voir le message
    je ne suis pas obligé de passer par un string mais je dois pouvoir écrire le résultat dans un fichier !
    Il est très facile d'écrire un byte[] dans un fichier. Aucun besoin de passer par String.
    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