PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Pb web service .net en UTF-8
Pb web service .net en UTF-8
Débuté par Frédéric LAMBOUR, 11 oct. 2006 16:35 - 11 réponses
Posté le 11 octobre 2006 - 16:35
Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon problème
j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description ici
http://loire-auto.packreport.everlog.com/service.asmx…
Il ne contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE)
{
return sTexteE;
}

Je vous propose de vous attacher ce web service dans un projet de test puis
de le consomer avec comme chaine de test "éàè". La réponse est "???". Notez
qu'il n'y a pas de pb avec un WebService en iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE"
DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE
bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding")
SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN
FIN
RENVOYER UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide
Posté le 12 octobre 2006 - 17:01
Salut,

Généralement, les données à envoyer sont à coder.
Essayes avec URLEncode et URLDecode.

A
Adrien

Surfez l’esprit tranquille grâce au pack google !
http://codewindev.com.free.fr/freewares.htm
Posté le 12 octobre 2006 - 18:18
Ca ne fonction pas
"Adrien" <adrien.titou@free.fr> a écrit dans le message de news:
452e09b2$1@news.pcsoft.fr...



Salut,

Généralement, les données à envoyer sont à coder.
Essayes avec URLEncode et URLDecode.

A
Adrien

Surfez l'esprit tranquille grâce au pack google !
http://codewindev.com.free.fr/freewares.htm

Posté le 12 octobre 2006 - 18:31
Essayes ce code, chez moi il fonctionne :

DotNet.Nom[1] ="sTexteE"
DotNet.Type[1] =DotNetTypeChaîne
//DotNet.Valeur[1]="Valeur de test avec des accents é à è" //BAD
DotNet.Valeur[1]=URLEncode("Valeur de test avec des accents é à è")//OK
bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx","TestEncoding", "http://Everlog.com/WebServices/","http://Everlog.com/WebServices/TestEncoding")
SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN
FIN
//Trace(UTF8VersChaine(DotNetDonneRésultat(DotNetRésultat))) //BAD
Trace(URLDécode(DotNetDonneRésultat(DotNetRésultat))) //OK

A
Adrien

Surfez l’esprit tranquille grâce au pack google !
http://codewindev.com.free.fr/freewares.htm
Posté le 12 octobre 2006 - 18:45
Alléluia !

Il faut décoder le résultat avec URLDecode() pour que ca fonctionne !!!!

Merci merci merci !

a


"Adrien" <adrien.titou@free.fr> a écrit dans le message de news:
452e5116$1@news.pcsoft.fr...


Essayes ce code, chez moi il fonctionne :

DotNet.Nom[1] ="sTexteE"
DotNet.Type[1] =DotNetTypeChaîne
//DotNet.Valeur[1]="Valeur de test avec des accents é à è"
//BAD
DotNet.Valeur[1]=URLEncode("Valeur de test avec des accents é à è")//OK
bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx","TestEncoding",
"http://Everlog.com/WebServices/","http://Everlog.com/WebServices/TestEncoding")
SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN
FIN
//Trace(UTF8VersChaine(DotNetDonneRésultat(DotNetRésultat))) //BAD
Trace(URLDécode(DotNetDonneRésultat(DotNetRésultat))) //OK

A
Adrien

Surfez l'esprit tranquille grâce au pack google !
http://codewindev.com.free.fr/freewares.htm

Posté le 12 octobre 2006 - 19:49
Bonjour,


"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon
problème j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description ici
http://loire-auto.packreport.everlog.com/service.asmx… Il ne
contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE) {
return sTexteE; }

Je vous propose de vous attacher ce web service dans un projet de test
puis de le consomer avec comme chaine de test "éàè". La réponse est
"???". Notez qu'il n'y a pas de pb avec un WebService en iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE" DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding") SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN FIN RENVOYER
UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide



Comment ton service Web connait l'encoding de la
chaine que tu lui envoies?
Tu peux lui envoyer une chaine en UTF8, mais si tu ne lui indiques pas
il ne va pas en faire grand chose.

As tu la possibilté sur ton service Web de voir le message envoyé par
Windev?
Il faudrait que tu puisses récupérer le Header et Body qui arrivent
sur le service.



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 13 octobre 2006 - 12:14
Hi,

Regarde la réponse d'Adrien. Il a trouvé la solution.

a+
"Daniel" <voir-la-signature@wanadoo.fr> a écrit dans le message de news:
m2u029wpb1.fsf@doudou.coul.fr...

Bonjour,


"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon
problème j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description ici
http://loire-auto.packreport.everlog.com/service.asmx… Il ne
contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE) {
return sTexteE; }

Je vous propose de vous attacher ce web service dans un projet de test
puis de le consomer avec comme chaine de test "éàè". La réponse est
"???". Notez qu'il n'y a pas de pb avec un WebService en iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE" DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding") SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN FIN RENVOYER
UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide



Comment ton service Web connait l'encoding de la
chaine que tu lui envoies?
Tu peux lui envoyer une chaine en UTF8, mais si tu ne lui indiques pas
il ne va pas en faire grand chose.

As tu la possibilté sur ton service Web de voir le message envoyé par
Windev?
Il faudrait que tu puisses récupérer le Header et Body qui arrivent
sur le service.



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 17 octobre 2006 - 12:42
Bonjour,

Fausse joie ! Ca ne fonctionne pas du tout dans la réalité. Le service WEB
reçoit une chaine de caractère encodé qu'il ne peut utiliser nativement !
Je fais un nouveau post avec un nouveau service web mettant en évidence
l'anomalie (je deviens fou avec ce pb)

a+

"Adrien" <adrien.titou@free.fr> a écrit dans le message de news:
452e5116$1@news.pcsoft.fr...


Essayes ce code, chez moi il fonctionne :

DotNet.Nom[1] ="sTexteE"
DotNet.Type[1] =DotNetTypeChaîne
//DotNet.Valeur[1]="Valeur de test avec des accents é à è"
//BAD
DotNet.Valeur[1]=URLEncode("Valeur de test avec des accents é à è")//OK
bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx","TestEncoding",
"http://Everlog.com/WebServices/","http://Everlog.com/WebServices/TestEncoding")
SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN
FIN
//Trace(UTF8VersChaine(DotNetDonneRésultat(DotNetRésultat))) //BAD
Trace(URLDécode(DotNetDonneRésultat(DotNetRésultat))) //OK

A
Adrien

Surfez l'esprit tranquille grâce au pack google !
http://codewindev.com.free.fr/freewares.htm

Posté le 17 octobre 2006 - 12:43
Fausse joie ! Ca ne fonctionne pas du tout dans la réalité. Le service WEB
reçoit une chaine de caractère encodé qu'il ne peut utiliser nativement !
Je fais un nouveau post avec un nouveau service web mettant en évidence
l'anomalie (je deviens fou avec ce pb)

"Daniel" <voir-la-signature@wanadoo.fr> a écrit dans le message de news:
m2u029wpb1.fsf@doudou.coul.fr...

Bonjour,


"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon
problème j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description ici
http://loire-auto.packreport.everlog.com/service.asmx… Il ne
contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE) {
return sTexteE; }

Je vous propose de vous attacher ce web service dans un projet de test
puis de le consomer avec comme chaine de test "éàè". La réponse est
"???". Notez qu'il n'y a pas de pb avec un WebService en iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE" DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding") SI PAS bRes ALORS
SI DotNetErreur(DotNetErrMessage)~="" ALORS
Erreur(ErreurInfo())
SINON
Erreur(DotNetErreur(DotNetErrMessage))
FIN FIN RENVOYER
UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide



Comment ton service Web connait l'encoding de la
chaine que tu lui envoies?
Tu peux lui envoyer une chaine en UTF8, mais si tu ne lui indiques pas
il ne va pas en faire grand chose.

As tu la possibilté sur ton service Web de voir le message envoyé par
Windev?
Il faudrait que tu puisses récupérer le Header et Body qui arrivent
sur le service.



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 17 octobre 2006 - 15:40
Salut,

"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Fausse joie ! Ca ne fonctionne pas du tout dans la réalité. Le service
WEB reçoit une chaine de caractère encodé qu'il ne peut utiliser
nativement ! Je fais un nouveau post avec un nouveau service web
mettant en évidence l'anomalie (je deviens fou avec ce pb)


Tellement que tu postes en double.

C'est tout de même bizarre que l'histoire d'urlencode t'avais apporté
une solution, et il faudrait comprendre pourquoi.

Je te repose la même question as tu les moyens de tracer sur ton
serveur les messages reçus (header et body), car c'est le moyen le
plus simple d'avoir une info?


"Daniel" <voir-la-signature@wanadoo.fr> a écrit dans le message de
news: m2u029wpb1.fsf@doudou.coul.fr...
Bonjour,


"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon
problème j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description
ici http://loire-auto.packreport.everlog.com/service.asmx… Il ne
contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE) { return sTexteE; }

Je vous propose de vous attacher ce web service dans un projet de
test puis de le consomer avec comme chaine de test "éàè". La réponse
est "???". Notez qu'il n'y a pas de pb avec un WebService en
iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE" DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding") SI PAS bRes ALORS SI
DotNetErreur(DotNetErrMessage)~="" ALORS Erreur(ErreurInfo()) SINON
Erreur(DotNetErreur(DotNetErrMessage)) FIN FIN RENVOYER
UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide


Comment ton service Web connait l'encoding de la chaine que tu lui

envoies? Tu peux lui envoyer une chaine en UTF8, mais si tu ne lui
indiques pas il ne va pas en faire grand chose.

As tu la possibilté sur ton service Web de voir le message envoyé
par Windev? Il faudrait que tu puisses récupérer le Header et Body
qui arrivent sur le service.



-- suivre ce lien pour répondre: http://cerbermail.com/…
Daniel ;-)



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 17 octobre 2006 - 18:08
Hi,

URLEncode() était de la poudre aux yeux car le webservice recevait
"Frédéric" encodé comme une URL puis le renvoyait tel quel. URLDecode()
remettait le tout en place. Très mauvais test. Le nouveau service web en
ligne est beaucoup plus clair. Je ne sais pas comment analyser les messages
reçus (header et body) mais même en construisant la demande XML SOAP à la
main ca ne fonctionne pas. Je crois réellement être tombé sur un bug WINDEV
qui ne semble pas être capable de stocker dans une variable chaine un codage
UTF-8. Télécharge mon projet de test tu verras c'est troublant.

Merci pour tes conseils. J'ai réaliser un test en utilisant le composant
SOAP toolkit de microsoft et je n'ai eu aucun pb !

a+



"Daniel" <voir-la-signature@wanadoo.fr> a écrit dans le message de news:
m2hcy3b2fm.fsf@doudou.coul.fr...

Salut,

"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Fausse joie ! Ca ne fonctionne pas du tout dans la réalité. Le service
WEB reçoit une chaine de caractère encodé qu'il ne peut utiliser
nativement ! Je fais un nouveau post avec un nouveau service web
mettant en évidence l'anomalie (je deviens fou avec ce pb)

Tellement que tu postes en double.

C'est tout de même bizarre que l'histoire d'urlencode t'avais apporté
une solution, et il faudrait comprendre pourquoi.

Je te repose la même question as tu les moyens de tracer sur ton
serveur les messages reçus (header et body), car c'est le moyen le
plus simple d'avoir une info?


"Daniel" <voir-la-signature@wanadoo.fr> a écrit dans le message de
news: m2u029wpb1.fsf@doudou.coul.fr...
Bonjour,


"Frédéric LAMBOUR" <PasDeSpam_f.LAMBOUR@everlog.com> writes:

Bonjour,

Me revoilà avec mon problème d'encodage UTF-8. Pour illuster mon
problème j'ai mis en ligne un WebService très simple ici :
http://loire-auto.packreport.everlog.com/service.asmx description
ici http://loire-auto.packreport.everlog.com/service.asmx… Il ne
contient qu'une méthode TestEncoding() donc voici le code .NET

public string TestEncoding(string sTexteE) { return sTexteE; }

Je vous propose de vous attacher ce web service dans un projet de
test puis de le consomer avec comme chaine de test "éàè". La réponse
est "???". Notez qu'il n'y a pas de pb avec un WebService en
iso-8859-1.

Pour info voici mon code windev

PROCEDURE TestEncoding(LOCAL sTexteE est une chaîne)

DotNet.Nom[1] ="sTexteE" DotNet.Type[1] =DotNetTypeChaîne
DotNet.Valeur[1]=sTexteE bRes est un booléen
bRes=DotNetExécute("http://loire-auto.packreport.everlog.com/Service.asmx",
"TestEncoding", "http://Everlog.com/WebServices/",
"http://Everlog.com/WebServices/TestEncoding") SI PAS bRes ALORS SI
DotNetErreur(DotNetErrMessage)~="" ALORS Erreur(ErreurInfo()) SINON
Erreur(DotNetErreur(DotNetErrMessage)) FIN FIN RENVOYER
UTF8VersChaîne(DotNetDonneRésultat(DotNetRésultat))

Merci votre aide


Comment ton service Web connait l'encoding de la chaine que tu lui

envoies? Tu peux lui envoyer une chaine en UTF8, mais si tu ne lui
indiques pas il ne va pas en faire grand chose.

As tu la possibilté sur ton service Web de voir le message envoyé
par Windev? Il faudrait que tu puisses récupérer le Header et Body
qui arrivent sur le service.



-- suivre ce lien pour répondre: http://cerbermail.com/…
Daniel ;-)



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 18 octobre 2006 - 10:23
Bonsoir,

je m'en doutais car je ne voyais pas le rapport, et lorsque vendredi tu as crié victoire avec le conseil d'Adrien je n'ai pas compris.

Bon j'ai effectué quelques tests rapides sur la structure des messages envoyés à un serveur SOAP (mais un exemple à moi, j'ai un service echoSoap!)

Le résultat est évident, mais je ne sais pas comment t'aider avec Windev. En passant par HTTPrequete tu peux refaire exactement le bon message, mais te demande de regarder la RFC.


Ce que j'ai relevé c'est les "headers" qui sont différents sur le Content-Type
où il y a l'absence du charset dans le cas de Windev.

Sur le message SOAP Windev :
le plus flagrant est déjà son formatage
ce qui fait qu'en mode trace c'est la galère pour l'analyser
(mais bon, tout le monde ne trace pas les messages ;-) )

Mais surtout l'absence de <?xml version="1.0" encoding="UTF-8"?>

Je ne sais pas si cela peut t'aider, mais nous revenons à l'info que je t'avais donné
vendredi on doit indiquer en quelle langue on parle au serveur ;-)




Voici le message envoyé par Windev
*** Incoming HTTP headers **********************************************
POST / HTTP/1.1
Content-Length: 346
Content-Type: text/xml
Accept: */*
Host: 192.168.1.1
User-Agent: PC SOFT Framework
Connection: close
SOAPAction: "echo"
************************************************************************
*** Incoming SOAP ******************************************************
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"><SOAP-ENV:Body><echo SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><v1 xsi:type="xsd:string">aze</v1></echo></SOAP-ENV:Body></SOAP-ENV:Envelope>

************************************************************************





Le Même message remis en forme au niveau du Message XML (Incoming SOAP)
*** Incoming HTTP headers **********************************************
POST / HTTP/1.1
Content-Length: 346
Content-Type: text/xml
Accept: */*
Host: 192.168.1.1
User-Agent: PC SOFT Framework
Connection: close
SOAPAction: "echo"
************************************************************************
*** Incoming SOAP ******************************************************
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
>
<SOAP-ENV:Body>
<echo
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<v1 xsi:type="xsd:string">aze</v1>
</echo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Le message avec un client(sous python) qui fonctionne
*** Incoming HTTP headers **********************************************
POST / HTTP/1.0
Host: 192.168.1.1:9900
User-agent: SOAPpy 0.12.0
Content-type: text/xml; charset="UTF-8"
Content-length: 476
SOAPAction: "echo"
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"

<SOAP-ENV:Body>
<echo SOAP-ENC:root="1">
<v1 xsi:type="xsd:string">aze</v1>
</echo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>



suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)