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

Vue hybride

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

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    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
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

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

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    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
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    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
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    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
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    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
    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.

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

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