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

MFC Discussion :

problème d'encoding UTF-8 via la SDK MSXML


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut problème d'encoding UTF-8 via la SDK MSXML
    Pour sauvegarder des fichiers de type xml, j'ai une méthode qui utilise un Writer MSXML4.0 et j'ai des pbs avec le processing instruction :

    Lorsque je code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          MSXML2::IMXWriterPtr writer(__uuidof(MXXMLWriter40));
          ...
          writer->put_encoding (L"UTF-8");
    le processing instruction de mon fichier xml est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" standalone="no"?>
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          writer->put_encoding (L"UTF-16");
    J'ai le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-16" standalone="no"?>
    Et enfin, si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          writer->put_encoding (L"UTF-32");
    J'ai le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-16" standalone="no"?>
    J'ai même essayé d'encoder en codepage 8859-1, même résultat, j'ai en résultat un encoding UTF-16 dans mon fichier xml de retour.
    Assez original comme résultat, j'ai soit de l'UTF-16, soit rien du tout.
    J'ai fait le tour de msdn, je n'ai rien trouvé ; si quelqu'un a une idée d'où peut venir le pb, je l'en remercie beaucoup.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le XML est en UTF-8 par défaut. Pour le UTF-32, je ne sais pas si c'est supposé marcher.

    Edite ton fichier XML généré avec UTF-8 à l'aide d'un éditeur Hexa ou d'un vieux notepad: Si, en tête du fichier, tu as trois caractères/octets en plus, alors c'est bon, le fichier est bien en UTF-8 et signalé comme tel.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Je ne vois pas les 3 octets supplémentaires.
    Si j'étais en UTF-8, un caractère de type "é" serait encodé en conséquent et ne paraitrait pas comme tel mais sur 2 octets ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet, en UTF-8, un é prend deux octets. (Un seul en Windows-1252")

    Si tu as un éditeur de texte moderne qui comprend l'UTF-8, tu verras le fichier directement converti en texte. C'est pourquoi je préconise l'éditeur hexa (ou un bête programme C/C++ qui affiche en hexa les octets qu'il lit).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    J'ai fait le test.
    Après avoir sauvegardé mon fichier xml, j'ai fait un fonction qui le lit et j'ai bien le caractère "é" sur un seul octet.
    Et même lorsque j'essaie d'ouvrir le fichier xml avec ie, il me dit qu'il est non valable à cause de ce caractère.
    Ce qui est bizarre, c'est que le writer xml m'encode les <, >, &, ; (communs à tous les fichiers xml) mais ne m'encode pas les autres caractères en fonction du codepage. Ce qui fait que le writer xml de MSXML permet d'enregistrer des fichiers xml non valides, ce qui est quand-même super-fort !!!
    Une autre suggestion stp ? Merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je viens de regarder dans la doc: on dirait bien que put_encoding demande une BSTR, et non juste un tableau de WCHARs...

    Tu as essayé avec une BSTR ? (SysAllocString() etc...)
    Et profites-en pour régler la propriété byteOrderMark, pour être sûr d'insérer les 3 caractères au début...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    J'ai fait le test avec un BSTR en paramètre, même résultat.
    Quant au put_byteOrderMark, je l'ai essayé à FALSE et à TRUE, toujours la même chose dans le fichier résultat. Snif !

Discussions similaires

  1. [DisplayTag] Problème d'encoding UTF-8 avec export
    Par Fr@ncky dans le forum Taglibs
    Réponses: 19
    Dernier message: 04/06/2015, 08h48
  2. Problème Encoding UTF-8
    Par Dastiny dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 26/03/2014, 15h42
  3. XML Encoding UTF-8 problème de majuscule
    Par rj450 dans le forum C#
    Réponses: 2
    Dernier message: 20/03/2013, 16h25
  4. [UTF 8] problème d'encoding
    Par nannous dans le forum Jasper
    Réponses: 6
    Dernier message: 17/02/2009, 17h10
  5. Réponses: 21
    Dernier message: 27/03/2008, 13h28

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