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

Messages postés
10
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
11 octobre 2011
- - Dernière réponse : 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.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
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
Messages postés
10
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
11 octobre 2011
0
Merci
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
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
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
Messages postés
10
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
11 octobre 2011
0
Merci
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
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
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
Messages postés
10
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
11 octobre 2011
0
Merci
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