[JAVA] Pb affichage caractère

Pb affichage caractère [JAVA] - Java - Programmation

Marsh Posté le 20-04-2005 à 11:19:38    

Salut tout le monde,
voila mon problème : J'ai fais un programme pour crypter les mots. Oui, bon, rien de bien original, mais je débute. Le programme fonctionne, mais le problème se situr au niveau du résultat.
Quand je retourne le résultat sur la sortie standard, j'ai bien tous mes caractères, mais quand je veux les afficher dans une fenêtre graphique, certain caractères sont remplacé par un carré.
 
Est-ce dû au propriété de "JOptionPane.showMessageDialog" ? Est-il possible de corriger cela ?
 
Merci d'avance pour votre aide.
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import javax.swing.JOptionPane;
  5. import javax.swing.JDialog;
  6. class CryptoTexte{
  7. public static String lireChaine(String message){
  8.  String valeur=null;
  9.  boolean ok=true;
  10.  while(ok){
  11.   String saisie=JOptionPane.showInputDialog(message);
  12.   if (saisie==null)System.exit(0);
  13.   try{
  14.    valeur=saisie;
  15.    ok=false;
  16.   }
  17.   catch(Exception exc){JOptionPane.showInputDialog("erreur" );
  18.   }
  19.  }
  20.  return valeur;
  21. }
  22. public static String Crypto(String Message){
  23.  String mot=null;
  24.  String masque=null;
  25.  String MotCrypter="";
  26.  int taillemot=0;
  27.  int taillemasque=0;
  28.  do{
  29.   mot=lireChaine("Taper le mot à crypter / decrypter :" );
  30.  }while(mot==null);
  31.  taillemot=mot.length();
  32.  while(taillemasque!=taillemot){
  33.   masque=lireChaine("Taper un masque de "+taillemot+" caractères !" );
  34.   taillemasque=masque.length();
  35.  }
  36.  char[] Tableau1 = mot.toCharArray();
  37.  char[] Tableau2 = masque.toCharArray();
  38.  int z=0;
  39.  System.out.print("Le mot crypter est : " );
  40.  while (z<taillemot){
  41.   char a=(char)(Tableau1[z]^Tableau2[z]);
  42.   z=z+1;
  43.   MotCrypter=MotCrypter+a;
  44.  }
  45.  System.out.println(MotCrypter);
  46.  return MotCrypter;
  47. }
  48. public static void showMessageDialog(){
  49.  String Chiffrer=Crypto("Le message crypté est :" );
  50.  JOptionPane.showMessageDialog(null,Chiffrer);
  51. }
  52. public static void main (String[] arg){
  53.  showMessageDialog();
  54. }
  55. }


Message édité par frenchlover le 20-04-2005 à 11:20:56

---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 20-04-2005 à 11:19:38   

Reply

Marsh Posté le 20-04-2005 à 16:10:02    

De toute façon ton algo génère des caractères non imprimables sous windows. C'est le Dos qui a une plus grande palette de caractères imprimables. Si tu souhaites que le mot crypté soit lisible il faut modifier ton algo

Reply

Marsh Posté le 21-04-2005 à 08:38:05    

Et comment est-ce que je peux faire ça ?
 
Je rappel que je suis un newbie :sweat: en programmation. Ca ne fais qu'un mois que j'en fais. Et les TP que j'ai eu en cour sont pultôt basique (du genre afficher un mot, faire un programme qui retourne les nombres pairs...).
 
J'essai d'aller plus loin par moi même, donc tous les conseils constructifs sont les bien venu.


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 22-04-2005 à 16:17:59    

Vérifie peut-etre que ton char est un chiffre ou une lettre, avec une méthode style isDigit(), ou isNumber().  
Les chiffres et les lettres, ca c'est imprimable à coup sur ;)

Reply

Marsh Posté le 22-04-2005 à 17:07:55    

1) regarde du côté de MessageDigest et de l'algo MD5
2) une méthode simple pour être sûr d'avoir des données affichable c'est de les réencoder en Base 64 derrière
3) la concaténation de caractères dans une boucle ca se fait avec StringBuffer ou StringBuilder, mais pas avec l'opérateur + sinon les perfs sont désastreuse.

Reply

Marsh Posté le 25-04-2005 à 11:29:46    

Tuxou -> Le but est justement de ne pas avoir forcement que des caractères et  
         des chiffres, mais aussi tous les symboles.  ;)  
 
Benou -> Je comprend pas trop ce que tu veux dire avec StringBuffer et +. C'est le "z=z+1" ou le "char a=(char)(Tableau1[z]^Tableau2[z]); " qui n'est pas bon ?
 
Sinon, n'est-il pas possible de ressortir la valeur dans un jtextfield ? Est-ce que cela ne permettrais pas d'avoir tous les caractères ?


Message édité par frenchlover le 25-04-2005 à 11:30:31

---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 25-04-2005 à 11:38:03    

c'est le MotCrypter=MotCrypter+a; qui devrait être remplacé par un append dans un StringBuffer


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed