Probleme d'accents lors d'un POST d'un formulaire [Résolu]

Signaler
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
-
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
-
Yop Yop
me revoila avec mes questions habituelles
si vous vous souvenez de moi j'avais eu des problemes a une epoque pour l'envoi de fichier en post et tout
bon c'est resolu et maintenant je sais tuot faire
mais je voulais cette fois juste envoyer du texte en post comme un formulaire

le probleme c'est que des que je met des accents sur mon texte, sur la base sql du serveur je reçoit que des ? a la place des caracteres accentués!
:(

j'ai sniffé mon port 80 et j'ai vu que les packets contenaient aussi les ? a la place des accents

j'ai donc fais un petit "messagebox.show(texte)" pour voir si mon texte etait affiché avec des accents avant l'envoi et tout va bien a ce niveau la
donc j'en ai conclu que c'est lors de l'envoi du post que ça change

je ne vois cepandant pas de solutions :(

a l'aide!

voila mon code:



//envoi des données en POST à l'url http:***************.php
string texte = rttexte.Text + "\n(Commentaire)";
DateTime date = DateTime.Now;
string sdate = date.Year.ToString() + "-";
if (date.Month < 10)
sdate = sdate + "0" + date.Month.ToString() + "-";
else
sdate = sdate + date.Month.ToString() + "-";
if (date.Day < 10)
sdate = sdate + "0" + date.Day.ToString();
else
sdate = sdate + date.Day.ToString();

MessageBox.Show(texte); //ici je verifie que le champ "texte" soit bien avec des accents. jusque la tout va bien

//les donnees a poster au serveur
StringBuilder strData = new StringBuilder();
strData.Append("comments_auteur=" + tbauteur.Text);
strData.Append("&comments_texte=" + texte);
strData.Append("&news_id=" + "");
strData.Append("&comments_serie=" + tbserie.Text);
strData.Append("&comments_date=" + sdate);


//On transforme le tout en tableau de byte
byte[] dataToPost = new ASCIIEncoding().GetBytes(strData.ToString());

// On cree la requete Http
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http:*********.php");

//On specifie la commande a utiliser dans notre cas POST
// Envoi de donnes au programme situ l'URL spcifie
myRequest.Method = "POST";

//Le type de contenu du corps de la requte
myRequest.ContentType = "application/x-www-form-urlencoded";

//Longueur du corps de la requte
myRequest.ContentLength = dataToPost.Length;

//On ecris les donnee dans la requete
Stream myStream = myRequest.GetRequestStream();

// Envoie des donnees
myStream.Write(dataToPost, 0, dataToPost.Length);
myStream.Close();

//On recupere la reponse
WebResponse myResponse = myRequest.GetResponse();

//on cree un flux
Stream responseStream = myResponse.GetResponseStream();

//On instancie un objet de type streamreader
StreamReader streamReader = new StreamReader(responseStream);

//On lit la totalite du flux
string result = streamReader.ReadToEnd();

//on ferme les flux
streamReader.Close();
responseStream.Close();
myResponse.Close();
myStream.Close();

MessageBox.Show("Envoyé!");
this.Close();

8 réponses

Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

TROUVEEEE

Encoding u8 = Encoding.GetEncoding(28591);

apres j'envoi avec:
byte[] dataToPost = u8.GetBytes(strData.ToString());

et ZOUUUUUU c'est trop fort! :)
Messages postés
2
Date d'inscription
vendredi 23 avril 2021
Statut
Membre
Dernière intervention
23 avril 2021

je n'ai pas bien saisie la reponse. pouver etre plus precis.
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137 >
Messages postés
2
Date d'inscription
vendredi 23 avril 2021
Statut
Membre
Dernière intervention
23 avril 2021

Bonjour
15 ans après je doute que vous allez avoir une réponse .
Surtout que la dernière intervention de warenbee sur le site date de 2009
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je pense que ton problème vient de l'encodage.

par défaut, sous windows, c'est unicode... mais sur l'internet, c'est iso-8859-1... donc pas vraiment la meme chose.

Sébastien FERRAND
[MVP C#]
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

ok mais comment convertir d'unicode en iso-8859-1 ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
En faisant

sr = new StreamReader(httpWResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("iso-8859-1"));

Peut-être ??


<HR>

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Salut,



A tout hasard, essai de voir si en remplacant tes accent par leur code cela fonctionne.

&eacute; pour le "é"

&eagrave; pour le "è"

&agrave; pour le "à"

...


Sinon, je te propose aussi une méthode un peu plus barbare :

avant d'envoyer ton message, tu le modifie tel que :

original : Mon chat est déjà allé jouer à l'école.

Transformé : Mon chat est d#ej#a all#e jouer #a l'#ecole.



Lorsque tu voudras récuperer ces données et les afficher, tu n'aura qu'à faire la fonction inverse.
Néo020585

La programmation, c'est l'art de découvrir
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

vai tenter
je vous tiens au courant des solutions que j'ai trouvé
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

é pour le "é"
&eagrave; pour le "è"
à pour le "à"

<<< remmplacer par le code ça ne marche pas. quand je regarde dans la base de donnée apres on ne voit meme plus le texte
apparement c'est le caractere & qui fait ça :(

sinon pour l'autre methode que tu me proposes elle me va pas car d'une part le texte est visible sur le net apres et donc je ne dois pas devoir modifier le
script php pour qu'il prenne en compte ces modifications
d'autre part, ça me parait "cochon" (barbare comme tu dis) :)


pour l'autre proposition:
En faisant
sr = new StreamReader(httpWResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("iso-8859-1"));
Peut-être ??

ça c'est pour la reception de la reponse
a la limite m'en fous de al reception moi c'est lorsque j'envoi le string texte que je dois gerer ça
mais je vais essayer de trouver une solution qui y ressemble
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

bon j'ai ete bete
puor encoder differement il suffit de changer la ligne:

byte[] dataToPost = new ASCIIEncoding().GetBytes(strData.ToString());
j'ai essayé avec unicode, utf8, utf7 utf32 mais rien a faire... ça marche pas

j'ai donc essayer de mixer ça avec les codes pour les accents (&eagrave etc)
mais rien n'y fais
si je suis en utf8 je suis avec des caracteres bizarres, sinon des des fois j'ai meme plus les lignes avec des accents..
etc :(

pffff je desespere :(