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

JDBC Java Discussion :

Insertion caractères arabes à partir d'une application Java Standard


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Insertion caractères arabes à partir d'une application Java Standard
    Je developpe une application Java qui doit insèrer des données mixtes (anglais , arab) dans une base de données.

    les donnés sont lus depuis une fichier en entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IN=new BufferedReader ( new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")));
    while ((ligne=IN.readLine())!= null)
    		{	 
    		    champs= ligne.split(";");
               //reste des traitements 
                     }
    j'ai implementé mon DriverManager pour supporter le UTF-8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Properties prop = new Properties();
    	     prop.put("user", user);
    	     prop.put("password", password);
    	     prop.put("useUnicode", "yes");
    	     prop.put("characterEncoding", "UTF-8");
                 //path : url de la BD
    	      con = DriverManager.getConnection(path, prop);
    Aussi j'ai implementé les variables qui vont être codé en arab comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //remark : variable en langue arabe
    remark=new String (var_string_arab);
    remark=new String (remark.getBytes("UTF-8"));
    La variable remark va être concatener à une autre variable String ,Cette variable peut contenir des caractère anglais et arab.
    aprèes elle sera inserer dans une colonne du type CLOB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Global_var=remark+var;
    //insertion dans la BD
    les parmetre nls_parametre de la BD sont ci dessous
    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
    PARAMETER    	                    VALUE
    
    NLS_LANGUAGE	                    FRENCH
    NLS_TERRITORY	                    FRANCE
    NLS_CURRENCY	                     ?
    NLS_ISO_CURRENCY	            FRANCE
    NLS_NUMERIC_CHARACTERS	    , 
    NLS_CALENDAR	                    GREGORIAN
    NLS_DATE_FORMAT	            DD/MM/RR
    NLS_DATE_LANGUAGE	            FRENCH
    NLS_CHARACTERSET	            AR8ISO8859P6
    NLS_SORT	FRENCH
    NLS_TIME_FORMAT	             HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT	     DD/MM/RR HH24:MI:SSXFF
    NLS_TIME_TZ_FORMAT 	     HH24:MI:SSXFF TZR
    NLS_TIMESTAMP_TZ_FORMAT     DD/MM/RR HH24:MI:SSXFF TZR
    NLS_DUAL_CURRENCY	              ?NLS_NCHAR_CHARACTERSET	      UTF8
    NLS_COMP	BINARY
    NLS_LENGTH_SEMANTICS	      BYTE
    NLS_NCHAR_CONV_EXCP	      FALSE
    Avec tous ces changement tous les donneés en arabes inseré sont tout simplement des point d'nterrogation. "???"

    Avez vous une idées pour m'aider à fixer ce problème, je galère depuis trois jours sans aucun résultat.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jamelledine_med Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //remark : variable en langue arabe
    remark=new String (var_string_arab);
    remark=new String (remark.getBytes("UTF-8"));
    Ce conde est une erreur, tu va prendre les byte représentant ta string en utf-8 et reconstruire un String en supposant que les byte sont dans le "charset standard". Dans le meilleurs des cas, ça ne fera rien. Dans les autre cas ca va corompre ta String.



    Enfin:
    Avec tous ces changement tous les donneés en arabes inseré sont tout simplement des point d'nterrogation. "???"
    Comment vérifie-tu ça? Le mieux pour t'assurer que c'est bien un problème avec la DB, c'est de

    1) faire le inser
    2) faire immédiatement un select de la même donnée
    3) vérifier que donneeRecue.equals(donneeEnvoyee)

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci pour votre reponse

    enfait c'es tje que j'ai viens de faire j'ai fait le select juste après l'insert

    le texte soi disons inserés et qui est afficher dans les logs est :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    <remark>جوائز موبينيل - 5000 نقطة</remark>

    mais la requete select retourne ce que suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <remark>?????????? ?????????????? - 5000 ????????</remark>
    vraiment je suis totalement perdu , je sais pas si ca vien du code ou de la BD elle mm.

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est juste la mise en évidence de code qui supporte pas l'arabe

    Bon, donc si je comprend bien

    Tu inséère des données (étape 1)
    tu fait dans la même transaction un select
    tu envoie le résultat dans la page web
    tu obtiens bien de l'arabe
    mais
    dans une autre page
    tu fais un select
    tu obtiens de points d'interrogation.

    J'ai bien compris?

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci de ton interêt

    oui en fait c'est bien ça j'envoie de l'arabe et j'obtient ces maudits "????"

    en fait je vais bien vous expliquer , l'application que je developpe n'est pas une application web. en fait c'est un programme java standard qui tourne sur un serveue UNIX.

    Cette application elle est destiné au opérateurs telecoms et elle inseère de nouveaux tax et des fees pour les clients dans une des tables bien définit de leur base de donné billing.

    c'est pas une application web c 'est juste du java standard.

    Cet outil Java lit les données à partir des fichiers input qui éventuellement contiennent de l'arabe.

    Le problème c'est que les charactère arabes sur la BD sont affiché en "????"
    mais les logs par java suportent bien l'arabe .

    la requête d'insertion vu des logs elle est correcte le charactère arabes sont correctes .

    Mais le valeurs inseré dans la base malheureusement sont des "???".

    bon j'ai essayé je que j'ai déja essayé ce qu'est déjà metionné dans les precedent messages, mais tjs rien.

    en fait ce pour ça qu' ce stade je suspecte la base de donné elle mm sauf que j'ai peut etre loupé un truc dans le code Java.

    en fait je vois pas vraiment il est ou le pb

    si tu aura une idée la dessus ca sera genial

    Un grand merci en tous cas

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    au niveau de ta DB, quand les bases d'oracle on été créées à l'installation, vous avez bien pris un format de stockage qui supporte les caractère arabes? Tu arrive à encoder de l'arabe avec le client oracle (manuellement donc)?

    Note: avec les driver oracle, j'ai déjà remarqué que pour forcer la discussion en UTF-8 entre client et serveur, il fallait parfois faire un -Dfile.encoding=UTF-8 sur la commande d'exécution java.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    en fait à partir d' ORACLE TOAD oui la saisie mauelle de l'arabe marche bien , mais par contre la commande insert insère aussi des "???"
    les parametres de la base sont affichés dans mon premier message.
    je vais tester le coup de Dfile sur la ligne de comande , et vous tiendrai informé

    Merci Bien

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jamelledine_med Voir le message
    en fait à partir d' ORACLE TOAD oui la saisie mauelle de l'arabe marche bien , mais par contre la commande insert insère aussi des "???"
    Je comprend pas là, ca marche ou ça marche pas a partir de TOAD.


    Les paramètres que tu as affiché (NLS etc), ce sont les paramètre de connection, pas ceux de la DB. Demander à ton administrateur oracle comment la base de donnée à été créée.

    Chez nous par exemple, un mauvais choix dans le format de stockage a fait que tous les caractère français fonctionnaient sauf des trucs typographiques avancés comme << et >> (doubles quotes ouvrant et fermant, utilisés dans les traitements de texte). Et changer le client ne faisait rien, c'était juste impossible pour la DB de faire le stockage.

  9. #9
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    sa peu merder a la recuperation, a l'insertion (le stoquage en base) ou a l'affichage :s

    toujours très chian les problème de caractaire :s

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour ,

    En fait pour presciser les insertion via TOAD Aussi ne marche pas on a tjs les "???" sur la BD.

    à la creation de la BD le charset été le UTF-8, donc l'arabe est supporté

    la base de donnée contient déja des données en arabes ,mais l'insertion avec loutil Java donne les "???" , c 'est pourquoi je suspecte connection jdbc à la base de donnée.

    Merci encore

  11. #11
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    ca peu aussi etre la recuperation des donner dans java ..
    (java utilise de l'utf16 en interne si mes souvenir son bon)

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jamelledine_med Voir le message
    à la creation de la BD le charset été le UTF-8, donc l'arabe est supporté
    J'ai pas souvenir que oracle avait UTF-8 dans son format de stockage (attention a ne pas confondre format des tables et format de stockage, c'est tordu oracle). Mais je suis pas DBA non plus Tu peux connaitre l'encodage utilisé avec la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
    la base de donnée contient déja des données en arabes
    Alors la chose la plus simple est d'essayer de configurer ton client pour afficher ces données, avant de traiter le problème éventuel d'insertion... Et aussi au passag essayer d'avoir TOAD qui fonctionne correctment.

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bsr en fait j'ai remarqué un truc

    Quand je connecte l'application Java à partie de ma machine (windows xp) en changeant le fichier de configuration , les données sont inseré correctement en arabe!

    Le problème survient quand j'execute l'aplication le (jar file) sur le serveur UNIX.
    Là l'application va lire à partir du serveur le dichier Input.
    le fichier est dans le format UTF-8 et il est transferé par FTP sur le serveur UNIX.
    en fait je peu afficher correctement le fichier arabe avec l'editeur VI
    mais l'insertion est tjs corrompus j'ai tjs les "???".

    j'ai deja ajouté la comande suivante export
    export NLS_LANG=AMERICAN_AMERICA.AR8MSWIN1256
    dans le script shell qui lance le Java mais pas chance tjs les "???"

    Merci

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LANG=fr_FR.UTF-8
    dans ta machine unix?

    aussi, ajouter -Dfile.encoding=UTF-8 à ta commande java:


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

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bsr ,

    Bon j'ai tout essayé les gars mais le problème persiste

    je croi que c'est un problème de charset conversion entre UNIX et ORACLE.

    Merci

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    salut les gars ,

    en fait j'ai toruvé un work arroud qui marche

    Sur Unix j'utilise un script sqlplus qui charge le fichier dans une table temporaire.

    après l'input du Java code devient la table et non plus le fichier .

    Avec ça je peux inserer correctement l'arabe

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. telnet a partir d'une application java
    Par ayadi_rajaa dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 09/07/2013, 16h46
  2. [JavaService] Création d'un service a partir d'une application java en Jar)
    Par maxxper59 dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 09/11/2010, 10h50
  3. Réponses: 0
    Dernier message: 31/03/2008, 13h06
  4. Réponses: 1
    Dernier message: 02/02/2007, 10h29
  5. lire un fichier xml à partir d'une application java
    Par diamonds dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/01/2007, 18h23

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