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

 Delphi Discussion :

delphi xe8 TNetHTTPClient accent


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut delphi xe8 TNetHTTPClient accent
    bonjour,

    j'utilisais les composant ICS pour POSTer une requête http, ça marche bien. mais j'ai voulu utiliser le composant natif de xe8:TNetHTTPClient
    et la j'arrive pas a envoyer les accents
    voici mon code:

    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
     
    var NetHTTPClient : TNetHTTPClient;
        parametres : Tstringlist;
    begin
       parametres := tstringlist.Create;
       NetHTTPClient := TNetHTTPClient.Create(nil);
     
       parametres .Add('nom_logiciel='+UTF8Encode('éè'));
       parametres .Add('emplacement='+EncodeURIComponent('éè') );
       parametres .Add('version='+ 'éè');
     
       NetHTTPClient.ContentType := 'application/x-www-form-urlencoded';
       NetHTTPClient.AcceptEncoding := 'UTF-8';
     
       NetHTTPClient.post('http://metaclients.xxx.fr/xxx',parametres,nil, TEncoding.UTF8).ContentAsString(tencoding.UTF8);
     
       parametres .Free;
       NetHTTPClient.Free;
    end;
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      UTF8Encode('éè')
      EncodeURIComponent('éè')
    pour tester si ça changeait quelque chose...mais non



    j'ai essayé aussi

    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
     
    var NetHTTPClient : TNetHTTPClient;
         ss: tstringstream;
         Data : AnsiString;
    begin
      NetHTTPClient := TNetHTTPClient.Create(nil);
      Data := 'nom_logiciel='+UTF8Encode('éè') +'&' +
              'emplacement='+EncodeURIComponent('éè') +'&' +
              'version='+ 'éè';
     
      ss := tstringstream.Create(Data, tencoding.UTF8);
     
      NetHTTPClient.ContentType := 'application/x-www-form-urlencoded';
      NetHTTPClient.AcceptEncoding := 'UTF-8';
     
      NetHTTPClient.post('http://metaclients.xxx.fr/xxx',ss).ContentAsString(tencoding.UTF8);
     
      NetHTTPClient.Free;
      ss.Free;
    end;
    pareil, dans ma base mysql j'ai éé au lieu de éè

    une idée ?

    merci

    exyacc

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    mais entre nom_logiciel, emplacement et version, tu ne devrais pas avoir le même résultat pourtant

    et je dirais à priori que tu encodes deux fois nom_logiciel en UTF8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Data := 'nom_logiciel='+UTF8Encode('éè') +'&' +
              'emplacement='+EncodeURIComponent('éè') +'&' +
              'version='+ 'éè';
     
      ss := tstringstream.Create(Data, tencoding.UTF8);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    en fait j'ai
    dans nom logiciel => éé
    et dans version, emplacement => éé

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse := NetHTTPClient.post('http://metaclients.xxx.fr/xxx',parametres,nil, TEncoding.UTF8).ContentAsString(tencoding.UTF8);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse :=NetHTTPClient.post('http://metaclients.xxx.fr/xxx',parametres).ContentAsString(tencoding.UTF8);

    => meme resultat

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par exyacc Voir le message
    en fait j'ai
    dans nom logiciel => éé
    et dans version, emplacement => éé
    alors EncodeURIComponent() ne sert à rien puisqu'il ne touche qu'à |`{}^/\?#% et l'espace

    ensuite éé c'est bien un encodage UTF8 de éé qui est lui-même un encodate UTF8 de éé

    ce qui s'explique car la méthode THTTPClient.Post utilise par défaut un encodage UTF8 alors que tu lui fournis une chaîne déjà encodée.

    moralité, ne t'occupe de rien, HTTPClient fait tout ce qu'il faut
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    quand je mets ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NetHTTPClient.post('http://metaclients.xxx.fr/xxx',parametres)
    j'ai quand même éé avec
    parametres .Add('version='+ 'éè');

    et la je mets aucun encodage


    j'ai oublié qqchose ?

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par exyacc Voir le message
    quand je mets ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NetHTTPClient.post('http://metaclients.xxx.fr/xxx',parametres)
    j'ai quand même éé avec
    parametres .Add('version='+ 'éè');

    et la je mets aucun encodage


    j'ai oublié qqchose ?
    et comment le site metaclients.xxx.fr traite-t-il la requête ? le problème est peut-être à ce niveau là.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    je suis pas le créateur du PHP qui est appelé,
    mais quand j'utilise le composant ICS, j'ai bien 'éè' qui est écrit dans ma base de donnée

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    avec ICS je faisais:

    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
    function TPost_http.post_data(url:string;Json_data:AnsiString):boolean;
    var Http : THttpCli;
    begin
      result := true;
      try
        try
          Http := THttpCli.Create(nil);
          Http.Timeout := 100000;
          Http.SendStream := TMemoryStream.Create;
          Http.SendStream.Write(Json_data[1], Length(Json_data));
          Http.SendStream.Seek(0, 0);
          Http.RcvdStream      := TMemoryStream.Create;
          Http.URL             := Trim(url);
          Http.ContentTypePost := 'application/x-www-form-urlencoded';
          http.OnRequestDone   := HttpCli1RequestDone;
          Http.Post;
        finally
          Http.RcvdStream.Free;
          Http.RcvdStream := nil;
          Http.SendStream.Free;
          Http.SendStream := nil;
          If (Http <> Nil) Then FreeAndNil(Http);
        end;
      except on E:Exception do
        begin
          ferreur := True;
          result := False;
          fmessage_erreur := E.Message;
        end;
      end;
    end;

    appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Data := 'nom_logiciel='+'éè' +'&' +
              'emplacement='+'éè' +'&' +
              'version='+ 'éè';
    post_data('http://metaclients.xxx.fr/xxx',Data) ;
    et la j'ai bien 'éè' dans la base....

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    et bien la variable json_data n'est ni encodée en UTF8, ni au format JSON

    il faut donc utiliser un Post avec un encodage ANSI et non UTF8.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NetHTTPClient.post('http://metaclients.shortcutscloud.fr/iamalive',Json_strings,nil, TEncoding.ANSI).ContentAsString(tencoding.UTF8);
    j'ai laissé et/ou viré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     //NetHTTPClient.AcceptEncoding := 'UTF-8';
    pareil

    j'avais essayé TEncoding.ANSI ,TEncoding.ASCII,TEncoding.default ....

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    bon, manifestement le type qui a codé cela a surtout voulu faire de l'UTF8

    la méthode post() utilise TNetEncoding.URL.EncodeForm() qui utilise TEncoding.UTF8.GetBytes(Input)...du coup c'est forcément de l'UTF8 :/
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    ok donc c'est plus du coté du code php qu'il faut faire des modifs pour que ça marche a la fois avec TNetHTTPClient et les composants ICS..


    merci pour ton aide

    exyacc

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Pour info, j'ai remonté le bug

    https://quality.embarcadero.com/browse/RSP-18045
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. [Delphi XE8] Générer des tableaux.
    Par Aooka dans le forum Langage
    Réponses: 8
    Dernier message: 11/08/2015, 08h02
  2. Précisions coût d'achat Delphi XE8
    Par Invité dans le forum Delphi
    Réponses: 10
    Dernier message: 12/07/2015, 10h42
  3. Licence DELPHI XE8
    Par dns22 dans le forum Delphi
    Réponses: 0
    Dernier message: 20/06/2015, 20h09
  4. [paxCompiler] La version 4.2 de paxCompiler supporte à présent Delphi XE8
    Par Alcatîz dans le forum Autres IDE
    Réponses: 0
    Dernier message: 30/05/2015, 16h32
  5. Creation d'un fichier batch avec delphi 2009 (pb accents)
    Par anthony_fr dans le forum Langage
    Réponses: 3
    Dernier message: 03/02/2011, 13h37

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