Iso-8859-1 ou olus généralement les formats des variables... [Résolu]

Ulixes2 10 Messages postés lundi 8 décembre 2008Date d'inscription 11 octobre 2011 Dernière intervention - 28 sept. 2011 à 17:09 - Dernière réponse : Ulixes2 10 Messages postés lundi 8 décembre 2008Date d'inscription 11 octobre 2011 Dernière intervention
- 11 oct. 2011 à 19:49
Bonjour à tous,

Voici mon petit problème : je dois envoyer à une page web des informations de type texte au format ISO-8859-1 via méthode GET.

Pour cela je récupère un texte saisi dans un memo et je l'ajoute à la fonction suivante :

resultat:= IdHTTP_sms.Get(Format('https://www.monsite.com/?pseudo=toto&pass=titi&texte=%s&id=%s'[IdHTTP.URL.PathEncode(text_a_envoyer),IdHTTP.URL.PathEncode(id_user)]));

Quelques question :

Quel est le format d'écriture par défaut dans un memo ? UTF8 ?
Peut on modifier directement ce format ?

Sinon comment encoder ce texte au format ISO-8859-1 ?

Ou tout simplement est ce que j'utilise la bonne méthode ?

Tout ceci sous Delphi2009.
Afficher la suite 

7 réponses

Répondre au sujet
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 11 oct. 2011 à 10:34
+3
Utile
Bon raté, la méthode de mon précédent message ne fonctionne pas.

Par contre, j'ai téléchargé indy 10 en dernière version, et voilà un code qui fonctionne :

procedure TForm1.Button1Click(Sender: TObject);
var
  resultat: String;
  text_a_envoyer: AnsiString;
  url: AnsiString;
  encoding: TIdTextEncoding;
begin
  text_a_envoyer:='vélo';
  encoding:= TIdTextEncoding.GetEncoding(CharsetToCodePage('ISO-8859-1'));
  url:= Format('http://www.google.com/webhp?q=%s', [IdHTTP_sms.URL.PathEncode(text_a_envoyer, encoding)]);
  memo1.Text:= url;
  resultat:= IdHTTP_sms.Get(url);
end;


Avec IdGlobal et IdCharsets dans les uses.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 9 oct. 2011 à 17:47
0
Utile
Bonjour,

Il se trouve que Delphi 2009 est la première version à avoir une VCL unicode. Cependant, ce n'est pas l'UTF-8 qui est utilisé mais l'UTF-16 (Donc deux octets ou plus par caractère).

L'ISO-8859-1 est presque identique au cp-1252 qui est le jeu de caractère ANSI utilisé notamment sur les Windows Français. La seul différence entre les deux est la présence du caractère euro dans cp-1252.

L'ISO-8859-1 était donc en gros l'encoding par défaut des versions précédentes de Delphi et de la VCL.
Bilan sous Delphi 2009, un AnsiChar revient à de l'ISO-8859-1 et un char/unicodechar revient à de l'UTF-16.

Bilan tu devrais pas être perdu !

Plus d'info sur delphi et l'unicode.
Commenter la réponse de cs_rt15
Ulixes2 10 Messages postés lundi 8 décembre 2008Date d'inscription 11 octobre 2011 Dernière intervention - 9 oct. 2011 à 21:29
0
Utile
Bonjour,

Merci pour cette réponse et pour le lien très instructif et complet, bien que cela dépasse un peu mes compétences.
Enfin au moins c'est relativement claire pour moi sur les format utilisé.

Maintenant voila ce que j'ai fait :

text_a_envoyer : AnsiString;

text_a_envoyer := Memo.Text;

resultat:= IdHTTP_sms.Get(Format('https://www.monsite.com/?pseudo=toto&pass=titi&texte=%s&id=%s'[IdHTTP.URL.PathEncode(text_a_envoyer),IdHTTP.URL.PathEncode(id_user)]));

Et pourtant toujours pas possible d'envoyer des "é" ou "è".

Alors soit j'ai toujours pas compris (ce qui est possible :D) soit je cherche pas au bon endroit !
Commenter la réponse de Ulixes2
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 10 oct. 2011 à 11:05
0
Utile
Ah oui c'est bizarre. Et je n'ai pas Delphi 2009 pour tester.

As-tu essayé d'afficher l'url avant de la passer dans le get ? Qu'obtiens-tu ?
As-tu essayer sur un site qui fonctionne à coup sûr style google ?
(http://www.google.com/search?q=v%E9lo)

procedure TForm1.Button1Click(Sender: TObject);
var
  resultat: String;
  text_a_envoyer: AnsiString;
  url: AnsiString;
begin
  text_a_envoyer:='vélo';
  url:= Format('http://www.google.com/webhp?q=%s', [IdHTTP_sms.URL.PathEncode(text_a_envoyer)]);
  memo1.Text:= url;
  resultat:= IdHTTP_sms.Get(url);
end;


Tu peux aussi éventuellement utiliser wireshark pour vérifier les requête HTTP.
Commenter la réponse de cs_rt15
Ulixes2 10 Messages postés lundi 8 décembre 2008Date d'inscription 11 octobre 2011 Dernière intervention - 10 oct. 2011 à 21:31
0
Utile
Bon, voici ce que cela me donne l'url dans le memo :

http://www.google.com/webhp?q=v%C3%A9lo

Ce qui pour Google n'est pas gênant mais pour moi un peu quand même ! Et là franchement je sèche !
Commenter la réponse de Ulixes2
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 11 oct. 2011 à 09:40
0
Utile
http://www.google.com/webhp?q=v%C3%A9lo


C3A9 c'est l'hexa de "é" en UTF-8.

Le PathEncode de ton indy fait du UTF-8 tandis que le mien fait de l'ANSI...

Regarde du côté de :
IdHTTP_sms.IdHTTP_sms.IOHandler.DefStringEncoding:= CharsetToEncoding('ISO-8859-1');


Perso je n'ai pas DefStringEncoding (Version trop ancienne de indy ?)

Regarde cette page et cherche peut être aussi DefStringEncoding sur le web.
Commenter la réponse de cs_rt15
Ulixes2 10 Messages postés lundi 8 décembre 2008Date d'inscription 11 octobre 2011 Dernière intervention - 11 oct. 2011 à 19:49
0
Utile
Merci a toi !!!

Effectivement avec cette méthode cela marche !
Vraiment Merci tu toute mon admiration pour ton aide forte utile et rapide de surplus !

Encore un pour la route MERCI
Commenter la réponse de Ulixes2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.