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

ASP Discussion :

pb encodage lors export XML


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut pb encodage lors export XML
    Bonjour,

    Je suis confronté à un problème d'encodage.

    Je me connecte à une base SQLServer afin d'en extraire les données pour les exporter ensuite sous la forme d'un fichier XML.

    voici comment je procède :

    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
     
     
     ''''''''''''''''''''début paramètres '''''''''''''''''''''''''''''''''''''''''
     
    	Server.ScriptTimeOut = 1800
     
        Set oFso = Server.CreateObject("Scripting.FileSystemObject")
        szFileName="Extract.xml"
        szFilePath = Server.MapPath(".")
     
        If oFso.FileExists(szFileName) Then
    		' Je dois supprimer le fichier de destination
    		oFso.DeleteFile(szFileName)
    	End If
     
        szFileName = szFilePath & "\" & szFileName
        response.write szFileName
        ' Crée le fichier de sortie
    	Set oOutputFile = oFso.CreateTextFile(szFileName, TRUE, FALSE)
     
    ''''''''''''''''''''''' Fin des paramètres ''''''''''''''''''''''''''''''
     
     
    '''''''''''''''''''''''''''''''''''''Ecriture en-tête fichier xml''''''''''''''''''''''''''''''''''''''''''''''''
       xml = "<?xml version=""1.0"" encoding=""UTF-8""?>"
     
     
    '''''''''''''''''''''''''''''''''''''Ecriture corps fichier xml''''''''''''''''''''''''''''''''''''''''''''''''
     
      rs.open "select * from MaTable"
      xml= xml & "<tags>"
      do until rs.eof 
         xml= xml & "<tag>" & rs("MonChamp") & "</tag>"
         rs.movenext
      loop
      rs.close
      xml = xml & "</tags>"
     
    ''''''''''''''''''''''''Ecriture du fichier
        oOutputFile.WriteLine(xml)
        '' Fermeture du fichier de sortie
    	Set oOutputFile = Nothing
    	Set oFso = Nothing

    Malheureusement SQLServer stocke les données en ISO-8859-1. Or notre partenaire à besoin d'un fichier encodé en UTF8 et la fonction équivalent à UTF8_Encode() de php n'a pas d'équivalent en ASP.

    après moult recherches, j'ai réussi à trouver cette info : http://xmlfr.org/listes/xml-tech/2001/12/0208.html

    malheureusement bien qu'en rajoutant @codepage=65001 je ne vois aucune différence entre mon ancodage ISO et mon Encodage UTF8 (même pb d'afichage et même poids à l'octet près).
    Comme si cela ne fonctionnait pas ...

    Quelqu'un a - t - il été déjà confronté à ce problème ???






    Je dois obligatoirement l'encoder en UTF-8. Or mon hébergeur a configuré le Server pour un stockage des données en ISO-8859-1.[/code]

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Par défaut
    t'as essayé un encoding utf directement dans ta requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select Cast(MonChamp as nvarchar(4000)) as MonChamp

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut
    hein ????

    Mais je savais pas que ça existait ça !!!!
    je vais essayer et je te tiens au courant .

    Pour info, c'est quoi qui provoque l'encodage UTF dans ce que tu as écrit ?
    J'aime bien comprendre ce que je fais. Car une fois compris c'est assimilé

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Par défaut
    Attends je sais pas si ça va marcher, mais un champ de type ntext, nvarchar ou nchar est stocké en unicode dans SQL server

    sinon est ton ami et il te dira :
    CAST et CONVERT
    Convertit explicitement une expression d'un type de données en une expression d'un type de données différent.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut
    Bon je récapitule pour ceux qui auraient ce pb un jour ...

    la situation : Un server SQLServer stockant les données en ISO-8859-1 (ou Latin-1), un server web IIS (executant de l'ASP) générant des flux en sortie eux aussi en ISO-8859-1.
    bien entendu ce sont des serveurs mutualisés sur lesquels je n'ai pas la main.

    Le pb : générer un fichier XML encodé en UTF-8 ...


    au départ j'étais parti sur l'idée de générer et enregistrer le fichier xml sur mon server via la méthode writeLine() ... voir code au-dessus (premier post) ...

    Mais le fichier généré était encodé en ISO et non en UTF8.
    J'ai donc essayé avec la directive de traitement CodePage pour IIS. mais cela ne fonctionnait pas quand même que ce soit indiqué en haut de page <@CodePage=65001> ou en utilisant la propriété CodePage de l'objet Session.
    .... impossible de générer un fichier en UTF8 en utilisant CodePage


    J'ai donc essayer d'utiliser la méthode de fredoche ... effectivement le nvarchar est bien stockée en UTF8. Enfin, dans l'aide de SQL Server il est dit encodé en UCS-2 (heu.. je suis pas un spécialiste de l'encodage ...).
    donc un CAST -> nvarchar permet de passer en UTF8

    malheureusement, mon fichier était toujours écrit en Latin-1 ... Peut être parce qu'une fois "sortie" de SQLServer en UTF8, mes données étaient retraitées par IIS ??? Je ne saurais surement pas mais en tout cas ça ne marche pas ...


    J'ai donc choisi une façon plus "bricole" ... comme dans l'URL que je cite dans mon premier post ...
    Au lieu de générer un fichier avec write line, je génère directement un flux HTTP que j'encode en UTF8 comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    .....
     
    <%
        'oOutputFile.WriteLine(xml)
        'Set oOutputFile = Nothing
        'Set oFso = Nothing 
     
        Session.Codepage = 65001
        Response.ContentType = "text/XML; charset=UTF-8"
        response.write(xml)
    %>
    Et là ça fonctionne. le fichier xml est généré en UTF8. reste plus qu'à le sauvegarder !!!!

    Voilà pour ceux qui auraient un pb lors de l'extraction de bdd au format XML encodé UTF-8....
    Seulement le truc qui est embêtant avec cette solution c'est que c'est impossible d'automatiser la chose ....
    on peut bien faire une tache plannifiée pour lancer le .asp générant le flux HTTP mais comment le recup si ce n'est via le navigateur ???? et là faut un ti d'homme pour faire "enregistrer sous" ....
    D'où mon appelation bricolage

    Donc pb à moitié résolu ... vu que je dois faire une génration et un envoie quotidien je sens que ça va vite me courrir .....

    Donc si quelqu'un pouvait m'aider à résoudre la deuxième moitié du pb ...

  6. #6
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Par défaut
    Salut !

    As tu envisagé l'utilisation de l'objet DOM ??
    des infos ici

    Tu peux indiquer l'encodage...

    Bon courage !
    Noisette

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut
    Bon je suis allé voir l'objet DOM ...

    je ne l'ai finalement pas utilisé. par contre j'ai vu qu'il semployait souvent avec l'objet Stream. Un objet que j'avais déjà rencontré pour le upload sans composant.

    Du coup j'ai réussi mon encodage avec l'objet stream. Il suffisait simplement de stockée le contenu de ma variable 'ContenuXML' donc mon flux XML dans un objet stream avec la proprité charset="utf-8" via la méthode WriteText puis de sauvegarder le contenu de mon objet stream via la methode SaveToFile comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    dim oStream
    set oStream=server.createobject("ADODB.Stream")
    oStream.charset="UTF-8"
    Ostream.writeText ContenuXML
    Ostream.SaveToFile "Extract.xml"
    ...

    Merci à tous !
    Et Noisette Prod je regarderais d'avantage l'onjet DOM d'ici quelque temps. Plein de possibilité interessante

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

Discussions similaires

  1. Encodage lors d'un export en csv
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2013, 10h37
  2. [XSLT][OpenOffice] Problème filtre d'export XML
    Par Maximil ian dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/06/2011, 20h10
  3. [XML] Problème d'encodage lors de la lecture xml
    Par adilou1981 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 12/09/2008, 14h07

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