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

SQL Oracle Discussion :

[Oracle Text]Problème d'encodage pour lire un document grec


Sujet :

SQL Oracle

  1. #1
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut [Oracle Text]Problème d'encodage pour lire un document grec
    Bonjour,

    Ci-dessous le corps d'une procédure stockée permettant de transformer en HTML un document (ici un document Word) enregistré dans une colonne de type BLOB ((j'ai omis le prototype de la procédure volontairement)) :

    Code sql : 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
     
     
    ...
     
       ctx_doc.markup (index_name      => 'documents_indx',
                       textkey         => p_doc_id,
                       text_query      => p_texte,
                       restab          => 'my_markup_table',
                       plaintext       => FALSE,
                       starttag        => '<FONT COLOR="RED"><B><A NAME=HIT%CURNUM HREF=#HIT%NEXTNUM>',
                       endtag          => '</A></B></FONT>',
                       prevtag         => '',
                       nexttag         => ''
                      );
     
    ...

    J'ai un problème pour récupérer dans un encodage correct (j'ai des ??? à l'envers alors que je m'attends à voir du texte en grec (que je ne comprends pas plus ) ) le contenu d'une colonne de type BLOB, le résultat de la procédure ci-dessus produit ce HTML dans ma table de destination my_markup_table :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    ...
     
    <p><font face="Times New Roman" size="3">¿¿¿¿¿¿</font>
    <p><font face="Times New Roman" size="3"><b>¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿</b></font>
    <p><font face="Times New Roman" size="3"><b>¿¿¿</b></font>
    <p><font face="Times New Roman" size="3"><b>¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿ 2002/72/¿¿ ¿¿¿¿¿¿¿ ¿¿ ¿¿ ¿¿¿¿¿¿¿¿ ¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿¿ ¿¿ ¿¿¿¿¿¿ ¿¿ ¿¿¿¿¿ ¿¿ ¿¿¿¿¿¿¿ </b></font>
    <p><font face="Times New Roman" size="3">(¿¿¿¿¿¿¿¿ ¿¿¿ ¿. ¿. ¿¿¿¿¿¿¿¿¿)</font>
     
    ...

    Pour informations :

    Version Oracle avec la commande :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM SYS.V_$VERSION;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
    PL/SQL Release 10.2.0.3.0 - Production                          
    CORE	10.2.0.3.0	Production                                      
    TNS for Solaris: Version 10.2.0.3.0 - Production                
    NLSRTL Version 10.2.0.3.0 - Production
    Encodage de la base avec la commande :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from nls_database_parameters
    where parameter='NLS_CHARACTERSET'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_CHARACTERSET               AL32UTF8
    Le code de la procédure stockée permettant d'enregistrer les documents (j'ai omis le prototype de la procédure volontairement) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    ...
     
    INSERT INTO VIS_DOCUMENTS_T (doc_id, doc_name, doc_contents, doc_title, doc_type, doc_format, doc_language, doc_size, doc_number, doc_version, doc_part, doc_lang_source, trans_int_ext, req_date, req_code, req_year, req_service)
      VALUES (doc_seq.NEXTVAL , p_file_name, EMPTY_BLOB(), v_DOC_TITLE, v_DOC_TYPE, v_DOC_FORMAT,  v_DOC_LANGUAGE, v_DOC_SIZE, v_DOC_NUMBER, v_DOC_VERSION,v_DOC_PART, v_DOC_LANG_SOURCE, v_TRANS_INT_EXT, v_REQ_DATE, v_REQ_CODE, v_REQ_YEAR, v_REQ_SERVICE)
      RETURN doc_contents INTO v_blob;
     
      v_bfile := BFILENAME('DOCUMENTS_IN', p_file_name);
      Dbms_Lob.Fileopen(v_bfile, Dbms_Lob.File_Readonly);
      Dbms_Lob.Loadfromfile(v_blob, v_bfile, Dbms_Lob.Getlength(v_bfile));
      Dbms_Lob.Fileclose(v_bfile);
     
    ...

    Script de création de la table MY_MARKUP_TABLE :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE MY_MARKUP_TABLE
    (
      QUERY_ID  NUMBER,
      DOCUMENT  CLOB
    )

    Auriez vous une solution pour résoudre mon souci ? des pistes ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est probablement le NLS_LANG du poste client qui pose problème non ?

  3. #3
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par orafrance Voir le message
    c'est probablement le NLS_LANG du poste client qui pose problème non ?
    Est ce que je trouverai de quoi tester ce comportement dans cet article ? :

    http://fadace.developpez.com/oracle/nls/

    Ou alors pourrais tu m'expliquer quoi vérifier pour qualifier le problème ?

  4. #4
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par elitost Voir le message
    Est ce que je trouverai de quoi tester ce comportement dans cet article ? :

    http://fadace.developpez.com/oracle/nls/

    Ou alors pourrais tu m'expliquer quoi vérifier pour qualifier le problème ?
    Pour information, le résultat de la la commande :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM NLS_SESSION_PARAMETERS;

    donne :

    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
    NLS_LANGUAGE|AMERICAN
    NLS_TERRITORY|AMERICA
    NLS_CURRENCY|$
    NLS_ISO_CURRENCY|AMERICA
    NLS_NUMERIC_CHARACTERS|.,
    NLS_CALENDAR|GREGORIAN
    NLS_DATE_FORMAT|DD-MON-RR
    NLS_DATE_LANGUAGE|AMERICAN
    NLS_SORT|BINARY
    NLS_TIME_FORMAT|HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT|DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT|HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT|DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY|$
    NLS_COMP|BINARY
    NLS_LENGTH_SEMANTICS|BYTE
    NLS_NCHAR_CONV_EXCP|FALSE
    Une piste ?

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    désolé mais la manipulation des NLS c'est pas trop mon fort l'article de fadace devrait t'aider

  6. #6
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par orafrance Voir le message
    désolé mais la manipulation des NLS c'est pas trop mon fort l'article de fadace devrait t'aider
    ok, à vrai dire je patauge même avec cet article...

    Peut être qu'une bonne âme qui passe par là pourra m'éclairer ?

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faudrait vérifier avec la fonction DUMP que le contenu de la colonne est correcte (ce qui suppose de connaître la représentation binaire des caractères grecs dans AL32UTF8: voir sur unicode.org):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dump(<colonne>, 1017) from <table>;
    NLS_LANG est une variable définie en dehors d'Oracle qui peut jouer un rôle.
    Sous Unix, c'est une variable d'environnement et sous Windows c'est par défaut une clé de registre. La partie jeu de caractères est utilisée par le client Oracle pour savoir s'il faut éventuellement traduire les caractères stockés dans la base côté client. Peut-être qu'il faut positionenr la partie jeu de caractères de NLS_LANG à EL8ISO8859P7 ?(voir une liste des jeux de caractères dans le Globalization Guide).

    Est-ce que vous pouvez afficher des caractères grecs dans votre environnement client ? Quel est l'outil utilisé pour afficher les données de la base ? Il est sans doute préférable d'utiliser un client de type SQL Developer plutôt que SQL*Plus.

  8. #8
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par pifor Voir le message
    Il faudrait vérifier avec la fonction DUMP que le contenu de la colonne est correcte (ce qui suppose de connaître la représentation binaire des caractères grecs dans AL32UTF8: voir sur unicode.org):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dump(<colonne>, 1017) from <table>;
    NLS_LANG est une variable définie en dehors d'Oracle qui peut jouer un rôle.
    Sous Unix, c'est une variable d'environnement et sous Windows c'est par défaut une clé de registre. La partie jeu de caractères est utilisée par le client Oracle pour savoir s'il faut éventuellement traduire les caractères stockés dans la base côté client. Peut-être qu'il faut positionenr la partie jeu de caractères de NLS_LANG à EL8ISO8859P7 ?(voir une liste des jeux de caractères dans le Globalization Guide).

    Est-ce que vous pouvez afficher des caractères grecs dans votre environnement client ? Quel est l'outil utilisé pour afficher les données de la base ? Il est sans doute préférable d'utiliser un client de type SQL Developer plutôt que SQL*Plus.
    En executant la commande sous SQL*Plus sur ma colonne DOCUMENT de type CLOB , j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select dump(DOCUMENT, 1017) from MY_MARKUP_TABLE;
    select dump(DOCUMENT, 1017) from MY_MARKUP_TABLE
                *
    ERROR at line 1:
    ORA-00932: inconsistent datatypes: expected - got CLOB
    Dans SQL*Plus j'ai tenté de connaître la valeur de NLS_LANG avec la commande :

    Qui m'a renvoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to open file ".[%NLS_LANG%]."
    J'ai alors ajouté une variable d'environnement NLS_LANG avec comme valeur GREEK_GREECE.EL8MSWIN1253

    Maintenant j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> @.[%NLS_LANG%]
    SP2-0310: õÕÝ Õ▀ÝßÚ õ§Ý߶³ ¶´ ▄Ý´ÚÒýß ¶´§ ß±¸Õ▀´§ ".[GREEK_GREECE.EL8MSWIN1253]"
    Et quand je tente de voir mon CLOB :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> SET LONG 32000
    SQL> select DOCUMENT from MY_MARKUP_TABLE;

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    an" size="2">¤╔┼╠(T)= 6 mg/kg (36) (ßÛ±§ÙÚÛ³ ´¯²)</font>
    </div>
    </td>
    </tr>
    ...

    Quand j'utilise TOAD pour visualiser le contenu de la colonne CLOB j'ai :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ...
    <p><font face="Times New Roman" size="3"><b>¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿</b></font>
    <p><font face="Times New Roman" size="3"><b>¿¿¿</b></font>
    <p><font face="Times New Roman" size="3"><b>¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿ 2002/72/¿¿ ¿¿¿¿¿¿¿ ¿¿ ¿¿ ¿¿¿¿¿¿¿¿ ¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿¿ ¿¿ ¿¿¿¿¿¿ ¿¿ ¿¿¿¿¿ ¿¿ ¿¿¿¿¿¿¿. </b></font>
    <br /><font face="Times New Roman" size="3"><b>(¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿ ¿¿¿)</b></font>
    <p><font face="Times New Roman" size="3">¿ ¿¿¿¿¿¿¿¿ ¿¿¿ ¿¿¿¿¿¿¿¿¿¿ ¿¿¿¿¿¿¿¿¿¿,</font>
    <p><font face="Times New Roman" size="3">¿¿¿¿¿¿¿ ¿¿¿¿¿:</font>
    ...

    Au final, ce code HTML sera affiché dans un client Java (j'ai fais également des tests avec Java mais sans plus de succès) mais comme déjà je ne m'en sort pas du côté Oracle je préfère y aller étape par étape.

    D'autres idées ?

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour l'instant laise TOAD à coté, utilisez SQL Plus sur le serveur de base de données.
    Pour connaître les paramètres de ta session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

  10. #10
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Pour l'instant laise TOAD à coté, utilisez SQL Plus sur le serveur de base de données.
    Pour connaître les paramètres de ta session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT USERENV('LANGUAGE') "Language" FROM DUAL;
    Pour le moment je n'ai pas les login/password pour ouvrir une session sur le serveur de base de données.

    Par contre, en SQL Plus, dans une console DOS sur mon poste, j'ai ce résultat :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT USERENV('LANGUAGE') "Language" FROM DUAL;
     
    Language
    ----------------------------------------------------
    AMERICAN_AMERICA.AL32UTF8

    ça peut vous aider à éclaircir mon pb ?

  11. #11
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Peut tu créer la table MY_MARKUP_TABLE comme indiquée plus bas et réessayer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE MY_MARKUP_TABLE
    (
      QUERY_ID  NUMBER,
      DOCUMENT  NCLOB
    )

  12. #12
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Peut tu créer la table MY_MARKUP_TABLE comme indiquée plus bas et réessayer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE MY_MARKUP_TABLE
    (
      QUERY_ID  NUMBER,
      DOCUMENT  NCLOB
    )
    J'ai donc recréé la table avec le type NCLOB mais maintenant je n'ai plus rien dans la colonne document (j'ai bien une ligne insérée pourtant ) que ce soit pour du grec ou de l'anglais quand j'execute ma procédure stockée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ...
     
       ctx_doc.markup (index_name      => 'documents_indx',
                       textkey         => p_doc_id,
                       text_query      => p_texte,
                       restab          => 'my_markup_table',
                       plaintext       => FALSE,
                       starttag        => '<FONT COLOR="RED"><B><A NAME=HIT%CURNUM HREF=#HIT%NEXTNUM>',
                       endtag          => '</A></B></FONT>',
                       prevtag         => '',
                       nexttag         => ''
                      );
     
    ...

    D'autres idées ?

  13. #13
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Peut tu créer la table MY_MARKUP_TABLE comme indiquée plus bas et réessayer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE MY_MARKUP_TABLE
    (
      QUERY_ID  NUMBER,
      DOCUMENT  NCLOB
    )
    Bref, j'ai passé un peu de temps à lire la doc et c'était un connerie. Désolé

  14. #14
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Bref, j'ai passé un peu de temps à lire la doc et c'était un connerie. Désolé
    Si tu as d'autres idées , je suis toujours preneur...

  15. #15
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Juste comme ça, peut être que le souci est au moment de l'indexation du document ?

  16. #16
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Est-ce que vous avez testé la possibilité d'insérer des caractères grecs et de pouvoir les afficher correctement dans le même environnement (même base, même client (SQL*Plus, Toad, ...), même valeur pour NLS_LANG) ?

  17. #17
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par pifor Voir le message
    Est-ce que vous avez testé la possibilité d'insérer des caractères grecs et de pouvoir les afficher correctement dans le même environnement (même base, même client (SQL*Plus, Toad, ...), même valeur pour NLS_LANG) ?
    Alors le résultat :
    Dans une console DOS, voilà ce que j'ai fais :

    1/passage du code page en Grec (737);
    2/connexion à la base;
    3/insertion de caractères grecs et commit;
    4/select des valeurs
    5/vue des paramètres de language de la session
    6/vue des paramètres de language de la base de données

    Code sql : 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
     
    D:\Program\Console2>GRAFTABL 737 /STATUS
    Previous Code Page: 850
    Active Code Page: 737
     
    D:\Program\Console2>sqlplus
     
    SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jan 30 11:43:27 2008
     
    Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.
     
    Enter user-name: myuser
    Enter password:
     
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining Scoring Engine options
     
    SQL> INSERT INTO my_markup_table (query_id, document) VALUES ('10', 'τροποποιήθηκε');
     
    1 row created.
     
    SQL> commit;
     
    Commit complete.
     
    SQL> select * from my_markup_table;
     
      QUERY_ID
    ----------
    DOCUMENT
    --------------------------------------------------------------------------------
            10
    t??p?p??????e
     
     
    SQL> SELECT USERENV('LANGUAGE') "Language" FROM DUAL;
     
    Language
    ----------------------------------------------------
    AMERICAN_AMERICA.AL32UTF8
     
    SQL> select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
     
    PARAMETER
    ------------------------------
    VALUE
    --------------------------------------------------------------------------------
    NLS_LANGUAGE
    AMERICAN
     
    NLS_TERRITORY
    AMERICA
     
    NLS_CHARACTERSET
    AL32UTF8

    Après insertion, je vois toujours les caractères erronés, peut être ai je oublié qqch ou fait une erreur quelque part ?

    Une idée ? explication ?

    Merci d'avance

  18. #18
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Je vois plusieurs problèmes:
    Je ne suis pas sûr que sqlplus.exe arrive à afficher des caractères grecs même avec la commande graftabl et le bon NLS_LANG.

    Vous utilisez un codage HTML qui ne peut pas être reconnu tel quel par Oracle comme codage de caractères. Si on ne pas entrer directement un caractère grec, il faut utiliser la fonction SQL UNISTR qui permet de choisir le caractère à partir de sa représentaion hexadécimale en Unicode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unistr('\03A8') = PSI majuscule
    unistr('\03A0') =  PI majuscule
    J'arrive à afficher ces caractères s'ils sont insérés dans un CLOB d'une base 10.2 avec UTF8 comme jeu de caractères et si j'utilise SQL Developer (NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252). Par contre ni sqlplus.exe ni TOAD 8.5 ne peuvent afficher ces caractères.

  19. #19
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Je vais regarder plus en détail cette fonction unistr

    Je crois qu'avec la version TOAD International je pourrais réussir à voir les caractères, mais ce n'est pas la version que nous utilisons.

    De toute manière au final, ce sera un client Java qui va lire ces caractères, mais avant je voulais comprendre pourquoi ces caractères bizarroïdes.

    Je reviendrai plus tard après quelques investigations.

  20. #20
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    C'est dur!
    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
     
    create table aa (a varchar2(100), b nvarchar2(100))
    /
    insert into aa values (unistr('\0394'), unistr('\0394'))
    /
    commit
    /
    SQL> select dump(a), dump(b) from aa;
     
    DUMP(A)
    --------------------------------------------------------------------------------
    DUMP(B)
    --------------------------------------------------------------------------------
    Typ=1 Len=1: 191
    Typ=1 Len=2: 3,148
    Ensuite dans PuTTy, Windows/Translation: Received data assumed to be in UTF8.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    export NLS_LANG=AMERICAN_AMERICA.UTF8
    sqlplus mni/mni
     
    SQL> select b from aa
      2  ;
     
    B
    --------------------------------------------------------------------------------
    Δ
    Voila le début de la solution.
    Et après avoir fait "Prévisualisation du message" j'ajoute:
    SQL> select b from aa
    2 ;

    B
    --------------------------------------------------------------------------

    Δ

    Ha, Ha.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.2] Problème d'encodage pour des exports excel
    Par keep67 dans le forum Langage
    Réponses: 4
    Dernier message: 15/12/2010, 11h52
  2. widget Text: problème d'encodage.
    Par Luke spywoker dans le forum Tkinter
    Réponses: 5
    Dernier message: 30/11/2010, 10h56
  3. Problème d'encodage pour l'écriture arabe
    Par jaljal dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 09/09/2010, 18h48
  4. Problème d'AS2 pour lire un xml et remplir des champs textes
    Par audrey.b dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 16/10/2007, 11h08
  5. Oracle Text : problème avec le français
    Par antonomase dans le forum Oracle
    Réponses: 1
    Dernier message: 28/02/2007, 11h26

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