Urgent SVP... Problème d'accents avec les Web Services
Le
JC
Bonjour,
Jespère que quelquun mapportera la solution car j'ai déjà pe=
rdu 6
jours de travail à chercher partout des solutions, et tous mes projets
sont bloqués à cause de ce problème
Je dois utiliser les services Web, mais j'ai un sérieux problème avec
les chaînes non ASCII (par exemple celles avec des accents, tel que
"Jérôme").
Voici deux morceaux de mon code : un extrait du WSDL, et des boutons
pour utiliser deux fonctions très simples du service Web.
- La première fonction (qui me sert de test pour l'envoi avec accent)
est Hello_Name (aName, aLogin, aPwd), qui utilise 3 chaînes de
caractères comme paramètres et renvoie simplement le paramètre
"aName" dans le message "Bonjour mon cher aName". Si jenvoie "John",
je reçois "Bonjour mon cher John", mais si jenvoie "Jérôme", je
reçois "Bonjour mon cher J?R?me" et pas "Bonjour mon cher Jérôme".
Quand je teste ce service web en Flash ou C#, je n'ai aucun problème
avec les accents, je reçois "Bonjour mon cher Jérôme".
- La deuxième fonction (qui me sert pour la réception d'accent) est
voir_users_meeting (aLogin), qui utilise 1 chaîne en paramètre ("1234"
en fait) et retourne tout simplement toujours la même liste de noms,
dont un nom avec accent ( "Zoé"). Encore une fois, avec Flash ou C#,
pas de problème, mais avec Windev je reçois "Zoé" et non pas "Zo=
é".
J'ai essayé beaucoup de solutions, mais je suppose 'pas la bonne'. Par
exemple, j'ai essayé:
- des appels avec SOAP.name [], SOAP.type []
- l'importation du webservice comme une collection de procédures
(comme prévu par Windev), puis d'appeler ces procédures. C'est la
solution que j'utilise en ce moment.
- de transformer les chaines avant l'envoi (et/ou après) en (ou à
partir de) XML, Unicode, ANSI, OEM, URL, etc.
- d'utiliser des chaines fixes, des chaînes de caractères ASCIIZ, des
chaines UNICODE, etc., en tant que paramètres.
Rien ne me donne "Jérôme" ou "Zoé" :-(
J'ai vraiment besoin de votre aide. J'espère que quelqu'un a la
solution.
Cordialement
JC Tarby
//-partie concernée du WSDL
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="USTL_LIFL_TRIGONE" xmlns:s="http://www.w3.org/2001/
XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="USTL_LIFL_TRIGONE" xmlns:wsdl="http://
schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified"
targetNamespace="USTL_LIFL_TRIGONE">
<s:element name="Hello_Name">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" =
/>
<s:element minOccurs="0" maxOccurs="1" name="login" type="s:string"=
/
>
<s:element minOccurs="0" maxOccurs="1" name="pwd" type="s:string" /=
>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Hello_NameResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Hello_NameResult"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
//
<s:element name="voir_users_meeting">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="id_meeting"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="voir_users_meetingResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="voir_users_meetingResult=
"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
//- code Windev pour Hello_Name (code dans un bouton)
stResultat est STHello_NameResponse
stTexteAEnvoyer est chaîne
// jai essayé aussi: stTexteAEnvoyer est STHello_Name
//et aussi: stTexteAEnvoyer est chaîne UNICODE, etc.
//
//
// jai essayé: stTexteAEnvoyer:m_name="Jérôme"
// et aussi: stTexteAEnvoyer=AnsiVersUnicode("Jérôme")
stTexteAEnvoyer="Jérôme"
stResultat=Hello_Name(stTexteAEnvoyer, "my_login", "my_password")
// jai essayé: stRésultat=Hello_Name(stTexteAEnvoyer:m_name,
"mon_login", "mon_password")
Info(stResultat:m_Hello_NameResult)
// et aussi
stResultat:m_Hello_NameResult=XMLVersTexte(stResultat:m_Hello_NameResult)
Info(stResultat:m_Hello_NameResult)
//- code Windev pour voir_users_meeting (code dans un
bouton)
//cest juste un exemple de tous mes essais ..
stResultat est STvoir_users_meetingResponse
sTexteAEnvoyer est chaîne
sTexteAEnvoyer="1234"
stResultat=voir_users_meeting(sTexteAEnvoyer)
stResultat:m_voir_users_meetingResult=XMLVersTexte(stResultat:m_voir_user=
s_meetingResult)
Info(stResultat:m_voir_users_meetingResult)
//fin du code
Jespère que quelquun mapportera la solution car j'ai déjà pe=
rdu 6
jours de travail à chercher partout des solutions, et tous mes projets
sont bloqués à cause de ce problème
Je dois utiliser les services Web, mais j'ai un sérieux problème avec
les chaînes non ASCII (par exemple celles avec des accents, tel que
"Jérôme").
Voici deux morceaux de mon code : un extrait du WSDL, et des boutons
pour utiliser deux fonctions très simples du service Web.
- La première fonction (qui me sert de test pour l'envoi avec accent)
est Hello_Name (aName, aLogin, aPwd), qui utilise 3 chaînes de
caractères comme paramètres et renvoie simplement le paramètre
"aName" dans le message "Bonjour mon cher aName". Si jenvoie "John",
je reçois "Bonjour mon cher John", mais si jenvoie "Jérôme", je
reçois "Bonjour mon cher J?R?me" et pas "Bonjour mon cher Jérôme".
Quand je teste ce service web en Flash ou C#, je n'ai aucun problème
avec les accents, je reçois "Bonjour mon cher Jérôme".
- La deuxième fonction (qui me sert pour la réception d'accent) est
voir_users_meeting (aLogin), qui utilise 1 chaîne en paramètre ("1234"
en fait) et retourne tout simplement toujours la même liste de noms,
dont un nom avec accent ( "Zoé"). Encore une fois, avec Flash ou C#,
pas de problème, mais avec Windev je reçois "Zoé" et non pas "Zo=
é".
J'ai essayé beaucoup de solutions, mais je suppose 'pas la bonne'. Par
exemple, j'ai essayé:
- des appels avec SOAP.name [], SOAP.type []
- l'importation du webservice comme une collection de procédures
(comme prévu par Windev), puis d'appeler ces procédures. C'est la
solution que j'utilise en ce moment.
- de transformer les chaines avant l'envoi (et/ou après) en (ou à
partir de) XML, Unicode, ANSI, OEM, URL, etc.
- d'utiliser des chaines fixes, des chaînes de caractères ASCIIZ, des
chaines UNICODE, etc., en tant que paramètres.
Rien ne me donne "Jérôme" ou "Zoé" :-(
J'ai vraiment besoin de votre aide. J'espère que quelqu'un a la
solution.
Cordialement
JC Tarby
//-partie concernée du WSDL
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="USTL_LIFL_TRIGONE" xmlns:s="http://www.w3.org/2001/
XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="USTL_LIFL_TRIGONE" xmlns:wsdl="http://
schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified"
targetNamespace="USTL_LIFL_TRIGONE">
<s:element name="Hello_Name">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" =
/>
<s:element minOccurs="0" maxOccurs="1" name="login" type="s:string"=
/
>
<s:element minOccurs="0" maxOccurs="1" name="pwd" type="s:string" /=
>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Hello_NameResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Hello_NameResult"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
//
<s:element name="voir_users_meeting">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="id_meeting"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="voir_users_meetingResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="voir_users_meetingResult=
"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
//- code Windev pour Hello_Name (code dans un bouton)
stResultat est STHello_NameResponse
stTexteAEnvoyer est chaîne
// jai essayé aussi: stTexteAEnvoyer est STHello_Name
//et aussi: stTexteAEnvoyer est chaîne UNICODE, etc.
//
//
// jai essayé: stTexteAEnvoyer:m_name="Jérôme"
// et aussi: stTexteAEnvoyer=AnsiVersUnicode("Jérôme")
stTexteAEnvoyer="Jérôme"
stResultat=Hello_Name(stTexteAEnvoyer, "my_login", "my_password")
// jai essayé: stRésultat=Hello_Name(stTexteAEnvoyer:m_name,
"mon_login", "mon_password")
Info(stResultat:m_Hello_NameResult)
// et aussi
stResultat:m_Hello_NameResult=XMLVersTexte(stResultat:m_Hello_NameResult)
Info(stResultat:m_Hello_NameResult)
//- code Windev pour voir_users_meeting (code dans un
bouton)
//cest juste un exemple de tous mes essais ..
stResultat est STvoir_users_meetingResponse
sTexteAEnvoyer est chaîne
sTexteAEnvoyer="1234"
stResultat=voir_users_meeting(sTexteAEnvoyer)
stResultat:m_voir_users_meetingResult=XMLVersTexte(stResultat:m_voir_user=
s_meetingResult)
Info(stResultat:m_voir_users_meetingResult)
//fin du code

Poser une question


UTF8VersChaîne("Zoé") = zoé
"JC" news:
Bonjour,
J’espère que quelqu’un m’apportera la solution car j'ai déjà perdu 6
jours de travail à chercher partout des solutions, et tous mes projets
sont bloqués à cause de ce problème ...
Je dois utiliser les services Web, mais j'ai un sérieux problème avec
les chaînes non ASCII (par exemple celles avec des accents, tel que
"Jérôme").
Voici deux morceaux de mon code : un extrait du WSDL, et des boutons
pour utiliser deux fonctions très simples du service Web.
- La première fonction (qui me sert de test pour l'envoi avec accent)
est Hello_Name (aName, aLogin, aPwd), qui utilise 3 chaînes de
caractères comme paramètres et renvoie simplement le paramètre
"aName" dans le message "Bonjour mon cher aName". Si j’envoie "John",
je reçois "Bonjour mon cher John", mais si j’envoie "Jérôme", je
reçois "Bonjour mon cher J?R?me" et pas "Bonjour mon cher Jérôme".
Quand je teste ce service web en Flash ou C#, je n'ai aucun problème
avec les accents, je reçois "Bonjour mon cher Jérôme".
- La deuxième fonction (qui me sert pour la réception d'accent) est
voir_users_meeting (aLogin), qui utilise 1 chaîne en paramètre ("1234"
en fait) et retourne tout simplement toujours la même liste de noms,
dont un nom avec accent ( "Zoé"). Encore une fois, avec Flash ou C#,
pas de problème, mais avec Windev je reçois "Zoé" et non pas "Zoé".
J'ai essayé beaucoup de solutions, mais je suppose 'pas la bonne'. Par
exemple, j'ai essayé:
- des appels avec SOAP.name [], SOAP.type []…
- l'importation du webservice comme une collection de procédures
(comme prévu par Windev), puis d'appeler ces procédures. C'est la
solution que j'utilise en ce moment.
- de transformer les chaines avant l'envoi (et/ou après) en (ou à
partir de) XML, Unicode, ANSI, OEM, URL, etc.
- d'utiliser des chaines fixes, des chaînes de caractères ASCIIZ, des
chaines UNICODE, etc., en tant que paramètres.
Rien ne me donne "Jérôme" ou "Zoé" :-(
J'ai vraiment besoin de votre aide. J'espère que quelqu'un a la
solution.
Cordialement
JC Tarby
//----------partie concernée du WSDL------------
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="USTL_LIFL_TRIGONE" xmlns:s="http://www.w3.org/2001/
XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="USTL_LIFL_TRIGONE" xmlns:wsdl="http://
schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified"
targetNamespace="USTL_LIFL_TRIGONE">
<s:element name="Hello_Name">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="login" type="s:string" /
<s:element minOccurs="0" maxOccurs="1" name="pwd" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Hello_NameResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Hello_NameResult"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
//..................
<s:element name="voir_users_meeting">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="id_meeting"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="voir_users_meetingResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="voir_users_meetingResult"
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
//------------- code Windev pour Hello_Name (code dans un bouton)
stResultat est STHello_NameResponse
stTexteAEnvoyer est chaîne
// j’ai essayé aussi: stTexteAEnvoyer est STHello_Name
//et aussi: stTexteAEnvoyer est chaîne UNICODE, etc....
//
//
// j’ai essayé: stTexteAEnvoyer:m_name="Jérôme"
// et aussi: stTexteAEnvoyer=AnsiVersUnicode("Jérôme")
stTexteAEnvoyer="Jérôme"
stResultat=Hello_Name(stTexteAEnvoyer, "my_login", "my_password")
// j’ai essayé: stRésultat=Hello_Name(stTexteAEnvoyer:m_name,
"mon_login", "mon_password")
Info(stResultat:m_Hello_NameResult)
// et aussi
stResultat:m_Hello_NameResult=XMLVersTexte(stResultat:m_Hello_NameResult)
Info(stResultat:m_Hello_NameResult)
//------------- code Windev pour voir_users_meeting (code dans un
bouton)
//c’est juste un exemple de tous mes essais…..
stResultat est STvoir_users_meetingResponse
sTexteAEnvoyer est chaîne
sTexteAEnvoyer="1234"
stResultat=voir_users_meeting(sTexteAEnvoyer)
stResultat:m_voir_users_meetingResult=XMLVersTexte(stResultat:m_voir_users_m
eetingResult)
Info(stResultat:m_voir_users_meetingResult)
//------fin du code
Bonjour,
A mon avis tu reçois de l'UTF-8...
--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
j'ai essayé de convertir avant, après, ne pas convertir, rien n'a
marché. Par exemple:
stRésultat est STHello_NameResponse
stRésultat=Hello_Name(ChaîneVersUTF8("Jérôme"),"monLogin", "monPw d")
Info(stRésultat:m_Hello_NameResult) //
résultat = J??r??me
Info(UTF8VersChaîne(stRésultat:m_Hello_NameResult)) // résultat =
J??r??me
A force de chercher, je ne vois plus rien... Qu'est-ce que je fais
mal ?
- pour le retour, en effet, ça marche. Je suis certain d'avoir essayé,
mais je n'ai pas du le faire sur les retours. J'ai du le faire que sur
les envois à force de tester dans tous les sens :-(
Ca donne ça comme code :
stRésultat=voir_users_meeting(sTexteAEnvoyer)
stRésultat:m_voir_users_meetingResult=UTF8VersChaîne(stRésultat:m_v oir_users_meetingResult)
JC
tu envoi une valeur à un webservice et tu vérifie le retour
si ton envoi ET ton retour n'est pas fiable, tu risque la grosse prise de
tete.
1/ pour tester l'envoi au webservice: log dans un ficheir texte sur le
serveur
2/ pour tester la réception d'un webservice, fait envoyer au webservice une
valeur fixé (par exemple zoé)
ton but sera alors de chercher :
1/ quoi envoyer pour avoir zoé logger dans le txt
2/ quoi décoder pour obteneir zoé
AMHA, les seuls essais à faire coté envoi sont :
zoé, textevershtml(zoé), texteversutf8(zoé)
et communique nous les résultats
"JC" news:
- UTF8, OK, mais pour les envois vers le web service, comment faire ?
j'ai essayé de convertir avant, après, ne pas convertir, rien n'a
marché. Par exemple:
stRésultat est STHello_NameResponse
stRésultat=Hello_Name(ChaîneVersUTF8("Jérôme"),"monLogin", "monPwd")
Info(stRésultat:m_Hello_NameResult) //
résultat = J??r??me
Info(UTF8VersChaîne(stRésultat:m_Hello_NameResult)) // résultat J??r??me
A force de chercher, je ne vois plus rien... Qu'est-ce que je fais
mal ?
- pour le retour, en effet, ça marche. Je suis certain d'avoir essayé,
mais je n'ai pas du le faire sur les retours. J'ai du le faire que sur
les envois à force de tester dans tous les sens :-(
Ca donne ça comme code :
stRésultat=voir_users_meeting(sTexteAEnvoyer)
stRésultat:m_voir_users_meetingResult=UTF8VersChaîne(stRésultat:m_voir_users
_meetingResult)
JC
en gros, c'est ca.
c'est déjà fait, et tous mes essais en Windev donnent des "?" à la
place des accents, alors que le même test en C# ou Flash donne bien
des accents corrects dans le log.
ça aussi, c'est la fonction voir_users.... ; elle renvoie toujours la
même chaine , et avec les réponses ci-dessus, je sais à présent
décoder les accents qui me sont renvoyés par le WS.
j'ai retesté avec tout ceci, et ça donne toujours des "?" côté serv eur
(ou bien les caractères de codage UTF8, HTML, etc.) :-(
sTexteEnvoyé=TexteVersXML(ChaîneVersUTF8("Jérôme"))
//sTexteEnvoyé=TexteVersXML("Jérôme")
//sTexteEnvoyé=ChaîneVersUTF8("Jérôme")
//sTexteEnvoyé="Jérôme"
//sTexteEnvoyé=TexteVersHTML(ChaîneVersUTF8("Jérôme"))
//sTexteEnvoyé=TexteVersHTML("Jérôme")
Info(sTexteEnvoyé)
stRésultat=Hello_Name(sTexteEnvoyé,"LIFL_Tarby", "785581004191")
Une idée ???
JC