Iso-8859-1 ou olus généralement les formats des variables...

Résolu
Ulixes2 Messages postés 10 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 11 octobre 2011 - 28 sept. 2011 à 17:09
Ulixes2 Messages postés 10 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 11 octobre 2011 - 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.

7 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 oct. 2011 à 10:34
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.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 oct. 2011 à 17:47
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.
0
Ulixes2 Messages postés 10 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 11 octobre 2011
9 oct. 2011 à 21:29
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 !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 oct. 2011 à 11:05
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ulixes2 Messages postés 10 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 11 octobre 2011
10 oct. 2011 à 21:31
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 !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 oct. 2011 à 09:40
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.
0
Ulixes2 Messages postés 10 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 11 octobre 2011
11 oct. 2011 à 19:49
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
0
Rejoignez-nous