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

C++ Discussion :

Pb Caractère spéciaux requête HTTP


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut Pb Caractère spéciaux requête HTTP
    Bonjour à tout le monde,
    J'ai un problème que je crois classique pour les programmeurs C++, voilà mon problème :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      envoyer ( &outSTD, "Content-type: text/xml" );
           envoyer( &outSTD, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
    	envoyer ( &outSTD ); 
    	envoyer ( &outSTD ); 
    	envoyer ( &outSTD, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
            envoyer ( &outSTD, "<element> à é aloum àuu </element>");
    sur le navigateur il m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <element>�  �  aloum  � uu
    donc il ne reconnait même pas mes accents malgré que j'ai choisi encodage des caractère spéciaux UTF-8 pour mon navigateur ainsi que mon fichier renvoyé sur la sortie

    Merci pour vos réponses.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    et en utilisant &eacute; et &agrave; ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    en utilisant &eacute; et &agrave; ?
    Il me l'affiche telle quelles !! , bien que je ne suis pas spécialiste Réseau
    mais je crois que le problème vient de l'entête HTTP car j'indique que mon contenu renvoyé de être encodé UTF-8 ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       envoyer( &outSTD, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
    et pour tester j'affiche les strings que j'envoie sur la console, alors je ne sais pas pourquoi il ne reconnait pas mes caractère spéciaux

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Problème XML et non C++.
    Cf FAQ XML.

    Edit : j'ai probablement répondu un peu vite. En fait, tu lui dis que tu va lui envoyer du UTF-8 mais je soupçonne que tu ne lui envois du ISO-8859-1. Tes chaînes ne sont probablement pas UNICODE. Donc soit tu lui dis que tu lui envois du ISO-8859-1, soit tu encode vraiment en UTF-8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      envoyer( &outSTD, L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
      envoyer ( &outSTD, L"<element> à é aloum àuu </element>");
    modulo que envoyer accepte du UNICODE

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci pour le lien mais justement ce n'est pas du tout le problème de xml c'est plutôt le problème de type de string vu que j'utilise un ostream et on m a conseillé de le caster en stream d'ailleurs je ne vois pas beaucoup l'intérêt mais vu que mon fichier xml est correcte alors je ne comprends pas pourquoi non plus pour l'affichage sur le navigateur

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Décidément on se croise dans les réponses. Je pense que tu crois encoder en UTF-8 mais que tu encodes en ISO-8859-1. Il faut mettre les 2 (l'en-tête XML et le codage effectif produit) en cohérences.

  7. #7
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Voilà ce que je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    envoyer( &outSTD, "Content-type: text/xml" );
               envoyer( &outSTD, L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
    l'entête et l'encodage, Je crois qu'il ne manque rien ?

  8. #8
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    envoyer( &outSTD, "Content-type: text/xml" );
               envoyer( &outSTD, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
    Pas de L faut de frappe

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Dans le code que tu montres, on ne sait pas comment sont effectivement envoyées les données. On ne sait pas ce que fait envoyer. Je soupçonne qu'elle prenne en second paramètre un char const *. Ce qui fait que les données envoyées le sont probablement en ISO-8859-1 et non en UTF-8. D'où un décalage entre ton en-tête XML et l'encodage réel des données.

  10. #10
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    oui effectivement c'est un char const *, je ne savais pas qu'il est de ISO-8859-1, alors qu'elle string en c++ est du UTF-8 comme ça on aura résolu le problème.

    Si quelqu'un sait un lien ou je peux trouver ces genres de détails Merci d'avance .

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par kazabliz Voir le message
    oui effectivement c'est un char const *, je ne savais pas qu'il est de ISO-8859-1, alors qu'elle string en c++ est du UTF-8 comme ça on aura résolu le problème.
    string = utf-8
    Citation Envoyé par kazabliz Voir le message
    Si quelqu'un sait un lien ou je peux trouver ces genres de détails Merci d'avance .
    Fonction recherche + "UTF-8" + "ISO-8859-1" sur le site de developpez donne beaucoup d'entrées intéressantes. Sinon, tu peux te plonger dans wiki sur ces mêmes entrées.

  12. #12
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci pour tes réponses rapides et précises, je modifierai ma méthode envoyer et je test puis je poste le résultat
    à+

  13. #13
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    j'ai essayé de modifier ma simple méthode


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <iostream.h>
     
     void envoyer (void* stream, const char* value)
    {
    	ostream* s = (ostream*)stream;
    	(*s) << value;
    }
    Alors je ne trouve pas comment je peux mettre string au lieu de const char *

    la bibliothèque iostream.h n'est pas aussi compatible Microsoft 2008 alors de préférence si c'est possible d'utiliser <iostream>

    donc ce que je cherche à faire c'est


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string value = "gggg à ç é";
         ostream* s = (ostream*) stream;
    	(*s) << value;
    au lieu de ostream j'utlise quelque chose compatible <iostream>

    Je suis débutant C++, vive la facilité Java :p.
    Merci d'avance .

  14. #14
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Je précise ma question :

    J'utilise Visual Studio 2005, ce que je veux faire c'est tout simplement envoyer utf-8 sur mon stream de sortie, si quelqu'un sais comment faire je suis preneur.
    Merci.

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    (1)Options du projet -> UNICODE
    (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void envoyer (std::wostream& stream, const wchar_t* value)
    {
    	stream << value;
    }
    // ou 
    void envoyer (std::wostream& stream, std::wstring value)
    {
    	stream << value;
    }
    (3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    envoyer(std::wcout,L"tutu");

  16. #16
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci pour tes réponses mais ce que je veux savoir c'est si possible d'envoyer une chaine de caractère n'importe quelle type de caractère sur un stream de type ma situation est un petit peu délicate car j'utilise plusieurs projets ces projets utlise ostream & comme stream de sortie donc c'est l'horaire de le changer

    Finalement la question pour la quelle j'ai créer cette discussion est :
    est ce que je peux envoyer une chaine sur mon stream de type ostream & et j'obtiens ma chaine avec les caractères spéciaux " é à ç "?

  17. #17
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include <locale>
     
    int main()
    {
       std::locale::global(std::locale(""));
       std::cout<<"àéèïô"<<std::endl;
       return 0;
    }
    Cf ici

  18. #18
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci 3DArchi pour tes réponses,
    la ligene de code suivante était suffisante pour me renvoyé les caractère accentué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::locale::global(std::locale(""));
    mais un autre problème est apparu, c'est les int avec virgule c-à-d au lieu d'obtenir 1000 j'obtiens 1,000 alors j'esseyerai de le traiter

    Encore merci

    Bon Week-end

  19. #19
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par kazabliz Voir le message
    c'est les int avec virgule c-à-d au lieu d'obtenir 1000 j'obtiens 1,000
    C'est lié au locale et à la façon dont tu choisis d'afficher les chiffres. Tu peux aussi avoir des différences entre 3.14 et 3,14.
    En fait, j'ai l'impression que c'est une solution un peu bancale. Il faut vraiment séparer ce que tu produis en sortie dans le fichier XML et en particulier veillez à produire de l'UTF-8 si tu veux de l'UTF-8 et ce que tu gère en interne (dans tes variables std::string, dans tes constantes de caractères, etc.). La ligne 'std::locale::global(std::locale(""));', je ne pense pas qu'elle fonctionne sur un PC anglo-saxon.

  20. #20
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Merci infiniment 3DArchi , tes réponses m'ont beaucoup aidé.

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

Discussions similaires

  1. Probléme avec requétes contenant des caractéres spéciaux
    Par dragonfly dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/11/2007, 17h20
  2. [SQLite] Échapper les caractères spéciaux d'une requête ?
    Par Franz2 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/03/2007, 13h17
  3. caractères spéciaux dans Access et requête SQL
    Par csszzen dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 14/03/2007, 16h20
  4. [Requête VBA] Gèrer les caractères spéciaux comme [ ' ]
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 17/07/2006, 15h32
  5. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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