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

Composants Java Discussion :

saisie des caractéres arabe dans un jTextField


Sujet :

Composants Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut saisie des caractéres arabe dans un jTextField
    Salut,
    J'ai une application java en arabe que je la développe avec NetBeans, la bibliothèque Swing et j'utilise mySql.
    J'ai réussi d'insérer des données arabe avec mySql.
    Mon problème est lors de l'insertion des données arabe à travers mon interface. L'insertion se fait correctement, mais les données arabe sont remplacées par ??????? lors de l'affichage dans la jTable ou bien à travers la commande view data.
    Comment forcer un jTextField de comprendre la langue arabe?
    Merci d'avance.

  2. #2
    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,


    Les composants Swing gère parfaitement cela grâce à l'Unicode. Tu peux le vérifier en tapant directement de l'arabe dans le JTexTField ou via un copier/coller.

    Le problème vient surement de la manière dont tu récupères les données que tu affiches dans le JTextField...

    a++

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup, oui je peux écrire en arabe dans un jTextField.
    Mais c'est quoi la solution?
    String s_nom=c1.getTextField3();//valeur en arabe saisie par l'utilisateur.
    Comment, après dans ma requête je trouve la valeur exacte et claire en arabe?

  4. #4
    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
    as-tu vérifié que tes tables dans mysql sont bien en utf-8 et que le driver mysql utilise bien lui aussi de l'utf-8?

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Oui, j'ai réussi d'insérer des données arabe à travers des requêtes dans netBeans et elles sont affichées correctement dans la jTable .
    Mon problème est lors de l'insertion des données arabes à travers l'interface, l'ajout se fait correctement. Cependant, dans la visualisation de mes données . Elles sont affichées??????
    Donc le problème peut être dans la récupération des données à travers les jTextFields. Il faut les forcer à comprendre l'arabe.

  6. #6
    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
    Le jtextfield travaillent en unicode. Si t'arrive à tapper toi meme de l'arabe dans les JTextField et qu'ils s'affichent correctement, ce sont tes Strings récupérées de la db qui sont corrompue. Il faut donc vérifier l'état de ton connecteur SQL, sa configuration, la config de la table sur la db, etc.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Merci, mais c'est quoi les String récupérés de la base de données, je veux insérer moi même des Strings en arabe.
    En plus la configuration de my Sql pour l'arabe est correcte puisque je peux insérer des données arabes à travers le mySql ou bien des requêtes dans netBeans. Le seul problème est lors de l'insertion à travers l'interface ces derniers sont affichés ?????
    Merci d'avance.

  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
    Il doit bien y avoir un moment où ce n'est plus correct et où tu as un problème d'encodage qui produit ce bug...

    Une chose est certaine cela ne vient pas des composants Swing, qui gère parfaitement cela !

    Donc le problème vient soit de l'insertion dans la base, soit de la récupération depuis la base, soit d'un traitement que tu ferais sur cette chaine...


    a++

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Merci, mais c'est quoi alors la solution pour les JTextField?

  10. #10
    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
    Corriger l'accès à la db et / ou le format des tables sur la db. Pour aider, on pourrais voir les éléments suivants?

    - code d'accès à la db
    - code de sauvegarde
    - code de lecture
    - format des tables (commande "describe" sous mysql)

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Merci,
    Concernant mySql j'ai ecris le code suivant dans la console:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > charset utf8 collate utf8_unicode_ci;
     
    > alter database loyer
       charset utf8 collate utf8_unicode_ci;
     
    >alter table client 
      convert to charset utf8 collate utf8_unicode_ci;

    Pour mon application avec netBeans:
    J'ai une classe
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    public class MyDBConnection {
     
        private Connection myConnection;
     
        /** Creates a new instance of MyDBConnection */
        public MyDBConnection() {
     
        }
     
        public void init(){
     
           try{
            Class.forName("com.mysql.jdbc.Driver");
            myConnection=(Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/loyer","root","tds");
            }
            catch(Exception e){
                System.out.println("Failed to get connection");
                e.printStackTrace();
            }
        }
     
        public Connection getMyConnection(){
            return myConnection;
        }
     
        public void close(ResultSet rs){
     
            if(rs !=null){
                try{
                   rs.close();
                }
                catch(Exception e){}
            }
        }
     
         public void close(java.sql.Statement stmt){
     
            if(stmt !=null){
                try{
                   stmt.close();
                }
                catch(Exception e){}
            }
        }
     
      public void destroy(){
     
        if(myConnection !=null){
             try{
                   myConnection.close();
                }
                catch(Exception e){}
        }
      }
    }
    et pour l'action du bouton ajouter dans la classe Client:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Client extends javax.swing.JPanel {
    private MyDBConnection mdbc;
    private java.sql.Statement stmt;
     
        public Client() throws SQLException {
             mdbc=new MyDBConnection();
             mdbc.init();
             Connection conn=mdbc.getMyConnection();
             stmt= conn.createStatement();
             initComponents();
            }
     
       private void jBAjouterActionPerformed(java.awt.event.ActionEvent evt) { 
            String s_codeclient=jTextField1.getText();
       String s_nom=jTextField2.getText(); //valeur saisie par l"utilisateur en arabe
    String insertStr="";
              try{
                insertStr="insert into client  values("
                        +quotate(s_codeclient)+","
                        +quotate(s_nom)
                        +")";
     
                  stmt=mdbc.getMyConnection().createStatement();
                 int done=stmt.executeUpdate(insertStr);
                 System.out.println("Ajout avec succes");
                }
            catch(Exception e){
                System.out.println("Erreur dans l'ajout");
                e.printStackTrace();
            }
    }
    L'insertion à travers l'interface se fait parfaitement sauf que le nom sera afficher ???? lors de la visualisation de mes données.
    Notez bien que l'insertion à travers mySql ou bien à travers execute commande dans netBeans des données arabes se fait corréctement et leurs visualisation est corrécte.

    J'ai remarquer aussi que si j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s="كلية";
    System.out.println(s);
    La valeur sera afficher ????

  12. #12
    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
    déjà, utilise çà pour la connection java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jdbc:mysql://127.0.0.1:3306/loyer?useUnicode=true&characterEncoding=UTF-8
    Quand à çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s="كلية";
    System.out.println(s);
    je vois pas trop ce que t'essaie de faire. Les entités html n'ont rien à voir avec la console. De plus, tenter d'afficher de l'arabe dans la console présuppose que la console gère les caractère arabe et dans le meme encodage que celui par défaut de la jvm. Tu peux le préciser au démarrage de l'application à rajoutant à java, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Dfile.encoding=UTF-8 monjar.jar

  13. #13
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Merci bien

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2012, 05h32
  2. Réponses: 4
    Dernier message: 09/10/2009, 23h31
  3. [MySQL] refus des caractères arabes dans la saisie
    Par Amel_B dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/12/2008, 10h30
  4. [MySQL] problème d'insertion des caractères arabe dans une base mysql
    Par sasaas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/03/2008, 11h56
  5. Problème de stockage des caractères arabe dans Mysql?
    Par merci_tous dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/04/2007, 12h21

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