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

Oracle Discussion :

[9IAS +Portal]CLOB et character set : problème d'affichage


Sujet :

Oracle

  1. #1
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut [9IAS +Portal]CLOB et character set : problème d'affichage
    Salut,

    voilà, j'essaie de lire un clob pour l'afficher dans une page web via htp.p.
    Pour info, ce CLOB est issu d'un fichier uploadé via un formulaire web, et il a donc fait l'objet d'une conversion BLOB vers CLOB via un processus similaire au code qui suit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    clobSize := dbms_lob.getlength( clobTpl ) ;
    clobOffset := 1;
    while ( clobOffset < clobSize ) loop
      htp.p( dbms_lob.substr(clobTpl, 32000, clobOffset) );
      clobOffset := clobOffset + 32000;
    end loop ;
    Dans ce cas pas de problème, mon clob s'affiche normalement.

    Maintenant, je voudrais modifier des chaines de caractères dans la clob.
    J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    owa_pattern.CHANGE( clobTpl,  'bonjour', 'hello'  ) ;
    et ensuite lorsque j'affiche le clob via la même méthode que ci-dessus, et bien j'obtiens :
    戼㰾㹵⍛楴汴⍥㱝甯㰾戯‾戼⽲ാ嬊搣獥牣灩楴湯崣戼⁲㸯਍⍛睷⍷]

    J'imagine que ça vient des character set, mais comment le modifier ?
    Bien sûr si vous avez une autre solution je suis preneur, merci.[/code]

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    pas forcement ca peut venir de ta procédure d'affichage

    Tu peux coller ton code qui te sert à afficher ton clob

  3. #3
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    clobSize := dbms_lob.getlength( clobTpl ) ; 
    clobOffset := 1; 
    while ( clobOffset < clobSize ) loop 
      htp.p( dbms_lob.substr(clobTpl, 32000, clobOffset) ); 
      clobOffset := clobOffset + 32000; 
    end loop ;

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    attend j'ai relu ce que tu disais au début. Y a un truc que je comprends pas c'est la conversion BLOB vers CLOB.... Tu essaies d'afficher du texte donc je vois pas trop l'interet du BLOB???

    Par contre tu as bien répondu à ma question ce qui met de coté le problème lié à htp.p (qui ne peut pas afficher + de 32000 caractères)

    Par précaution je tenterai de ramener ce chiffre à 20000 (car j'avais eu le meme genre de pb sous mon portal)

    Si ca ne marche toujours pas il faudrait que tu expliques clairement ce que tu fais...

    De plus as tu plusieurs langues installé sur ton portal? As tu configuré ton IE pour detecter les différentes langues?

  5. #5
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    je convertis blob vers clob pour ces raisons :
    portal enregistre tous les éléments dans un chanmp BLOB or je veux travailler avec du clob, donc je convertis en clob.

    Il y a bien plusieurs langues sur le portal, et mon navigateur est bien configuré (IE et Firefox).

    Pourquoi vouloir du CLOB ?
    ben parce que certaines portlets vont être amené à traiter plusieurs fois les chaines contenues dans le clob, or il serait stupide de convertir à chaque fois le bolb en clob.
    Donc je le fais une fois pour toute au début.

    Si tu as une îdée.

  6. #6
    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
    Et quel est l'intérêt de stocker du BLOB au lieu de CLOB ?

  7. #7
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    Disons que j'ai pas le choix,
    la table qui est désignée pour recevoir les fichiers uploadés via le portal à un champ BLOB (et ça tu le change pas apparemment).
    Donc je suis obligé d'utiliser un BLOB au départ pour ensuite le convertir une fois l'upload réussit.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    mais tu as pas besoin d'utiliser les tables de portal car si tu stockes du text il sotcke du clob

  9. #9
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    pourtant, quelque soit le formulaire utilisé et la portlet utilisée, quand j'upload un fichier depuis une formulaire web, et bien il est stocké dans la table wwdocs... de portal et dans ma portlet portal m'a retourné le nouveau nom du fichier : [0-9]*.extension
    En aucun cas je ne peux lui faire enregistrer un fichier uploadé ailleurs sans passer par cette table.

    Mais bon, ça ne fait que peu de temps que je suis sur cette application et je suis très loin de tout connaitre.

    Alors si on peut faire autrement je suis preneur, et j'en serais même super heureux parce que je n'aime pas vraiment être obligé de passer par une table de portal alors que ma portlet est totalement indépendante.

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    ok alors si tu veux que l'on t'aide va falloir nous expliquer clairement ce que tu veux faire et ce depuis le début (utilisation de fichier, clob, blob méthode et autre)

    Sinon on n'y arrivera jamais

  11. #11
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut On prend la même chose et on recommence ;)
    Plus sérieusement, j'ai trouvé une autre solution pour parvenir à mes fins.
    Mais voilà c que je voulais faire :

    1 portlet d'upload de fichier txt
    Cette portlet est placée dans le portal mais elle doit stocker le fichier uploadé (via formulaire web) ailleurs que dans wwdoc_document$ (table de stockage des fichiers par défaut lors d'un upload). Pour notre exemple la table sera FILE_DOC

    2 portlet d'affichage des fichiers
    Cette portlet doit lire les fichiers txt depuis FILE_DOC et afficher son contenu

    Voilà, c'est tout bête.
    Mes questions sont donc :
    _Peut on définir une autre table de stockage pour les fichiers uploadés sans passer par wwdoc_document$ ?
    _Pourquoi de temps en temps l'affichage du txt (étape 2) est mauvais : caractère accentué remplacé par un point d'interrogation ?

    J'espère avoir été claire.

    Merci pour l'aide apporté.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut Re: On prend la même chose et on recommence ;)
    Citation Envoyé par rebolon
    Plus sérieusement, j'ai trouvé une autre solution pour parvenir à mes fins.
    Mais voilà c que je voulais faire :

    1 portlet d'upload de fichier txt
    Cette portlet est placée dans le portal mais elle doit stocker le fichier uploadé (via formulaire web) ailleurs que dans wwdoc_document$ (table de stockage des fichiers par défaut lors d'un upload). Pour notre exemple la table sera FILE_DOC

    2 portlet d'affichage des fichiers
    Cette portlet doit lire les fichiers txt depuis FILE_DOC et afficher son contenu

    Voilà, c'est tout bête.
    Mes questions sont donc :
    _Peut on définir une autre table de stockage pour les fichiers uploadés sans passer par wwdoc_document$ ?
    Oui c'est possible (un peu plus compliqué mais c'est possible)

    Citation Envoyé par rebolon
    _Pourquoi de temps en temps l'affichage du txt (étape 2) est mauvais : caractère accentué remplacé par un point d'interrogation ?

    J'espère avoir été claire.

    Merci pour l'aide apporté.
    Ca peut etre du à 3 choses, un probleme dans ta procédure qui affiche le texte (htp.prn ne supporte pas plus de 32767 caractères), ca peut etre du à un probleme de conversion dans le jeux de caractères, ca peut aussi etre du à ton ie qui ne fait pas la détection du jeux de caractère.

  13. #13
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    J'ai regardé dans ma table qui contient le CLOB, il apparait que les caractères accentué sont là aussi mal encodés.
    Le problème doit alors survenir lorsque je fais la conversion du BLOB vers le CLOB.
    Quel solution faut il alors adopté (s'il y en a une) ?

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    si ils sont mal encodé aussi dans ta table alors le pb viens de quand tu upload le fichier ou que ton client n'arrive pas trouver le jeux de caractères qui corresponds.

    Pkoi stockes tu les fichiers textes, pourquoi ne stocke tu pas le texte directement?

  15. #15
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    euh... là je ne comprend pas très bien.
    Dans mon clob j'ai bien du texte, non ?

    Si je comprend tu proposerais de ne pas utiliser un envoi de fichier mais d'utiliser un textarea dans mon formulaire ?
    ou bien est ce une autre proposition ?

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    non c'est ca. Tu envoie que le texte

    Tout au moins au début pour voir si il te fait le meme probleme.

  17. #17
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    Ben en fait j'ai déjà des formulaires avec des envois de texte et je stocke bien les accents correctement.

    A la question pourquoi ne pas utiliser des champs texte au lieu des fichiers la réponse est :
    c'ets pour permettre aux utilisateurs d'uploader leur contribution (format txt ou html = > plain/text) sans avoir à resaisir ou a faire du copier coller de leur texte.

    Je viens de tenter ça :
    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
     
            blobdata portal.wwdoc_document$.BLOB_CONTENT%TYPE;
            clobdata CLOB := null ;
            blobamount number default 4096 ;
            blobsize    NUMBER ;
            bloboffset  number := 1 ;
            blobbuffer  RAW(4096) ;
    BEGIN
                 blobdata := PORTAL.wwdoc_api.get_document_blob_content( p_name => p_filename );  
                 blobsize := dbms_lob.getlength( blobdata ) ;
     
    -- sous 10g, on peut utiliser : DBMS_LOB.CONVERTTOCLOB( clobdata, blobdata ) ;
                     WHILE bloboffset < blobsize LOOP
                         dbms_lob.READ( blobdata, blobamount, bloboffset, blobbuffer ) ;
                         clobdata := clobdata || convert(utl_raw.cast_to_varchar2( blobbuffer ), 'WE8ISO8859P1', 'WE8ISO8859P1') ;
                         bloboffset := bloboffset + blobamount ;
                         blobamount := 4096 ;
                     END LOOP ;
     
    END ;
    En vain, j'ai toujours pas mes caractères accentués dans mon clob

    Là je désespère[/code]

  18. #18
    Membre habitué

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Points : 136
    Points
    136
    Par défaut
    C'est bon j'ai trouvé :

    clobdata := clobdata || convert(utl_raw.cast_to_varchar2( blobbuffer ), 'UTF8', 'WE8ISO8859P1') ;

    là ça marche
    Merci pour toutes les informations et à bientôt.

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

Discussions similaires

  1. problème de character set
    Par anouarm dans le forum Installation
    Réponses: 26
    Dernier message: 22/07/2010, 21h43
  2. Réponses: 22
    Dernier message: 14/04/2006, 17h01
  3. Réponses: 1
    Dernier message: 17/01/2006, 10h47
  4. Problème de CHARACTERS SET
    Par genio dans le forum Oracle
    Réponses: 6
    Dernier message: 29/11/2005, 14h38
  5. Problème avec accents et CHARACTER SET ISO8859_1
    Par kinda dans le forum InterBase
    Réponses: 13
    Dernier message: 30/10/2003, 15h49

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