Webservice, accents et encoding

cs_Nicoola Messages postés 2 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 18 août 2004 - 18 août 2004 à 10:08
Yonel91 Messages postés 1 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 25 septembre 2009 - 25 sept. 2009 à 18:50
Bonjour a tous,
voila mon problème : J'attaque en c# un webservice distant (je ne l'ai pas développé), et je récupère des string. Seulement, les accents sont remplacés par '??'. J'ai un peu tout essayé pour traduire ces ??, avec System.Text.Encoding et autre URLDecode, mais rien n'y fait.

Le WSDL du webservice est en UTF-8.

Le problème est assez bizarre puisqu'avec les mêmes appels (sans retraitements des chaines) en Java et Delphi, les accents apparaissent correctement !

Si kkun a la solution miracle pour récupérer ces accents, je suis preneur !

merci d'avance :)

7 réponses

cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 août 2004 à 12:01
essaie qqch de ce genre là :

byte[] tmp = Encoding.Convert(Encoding.UTF8, Encoding.Default, Encoding.UTF8.GetBytes(machaine));
string machaine_convertie = Encoding.Default.GetString(tmp);


Cocoricoooooooo !!!!
0
cs_Nicoola Messages postés 2 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 18 août 2004
18 août 2004 à 12:29
ca marche toujours pas, j'ai essayé avec tous les Encoding possibles, et surtout avec ISO-8859-1 (normalement le latin ca devrait passer !) et ca change absolument rien.

Je suis même allé voir le byte-code pour ces caractères, toujours le même 63 (normal, c'est celui du ? :))

Pareil en Unicode : 003f qui correspond à '?'

Apparement la chaine de caractères que je recois ne contient pas les bons caractères, donc normal si j'arrive pas à traduire tout ca.

Y a pas un procédé interne à C# qui traduit à la volée les caractères qu'il recoit, un peu comme dans Java ? Peut être qu'il utilise des configs internes, genre celles de IE, pour se configurer tout seul (comme un grand ... ou presque)

C'est quand même bizarre que personne n'ai eu ce problème ...

Je vais essayé de faire un webservice pour voir si ca fait pareil.

En tout cas merci pour ton aide
0
adrien178 Messages postés 3 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 15 février 2005
15 févr. 2005 à 14:45
tout simplement :


StreamReader toto =
new StreamReader("c:\\test.txt",System.Text.Encoding.Default);
0
cs_tomboul Messages postés 25 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 26 mai 2009
16 mars 2009 à 23:39
4 ans après cette discussion je tombe sur le même problème, et rien a faire !!
quelle est la solution ???
car celles qu'ont données coq ou adrien  ne marchent pas sur visual basic 2008 !!!
comment transformer un é venant du web en é (code 63 en 233) sans avoir besoin de réinventer la poudre ????
(genre écriture d'un switch case et conversion de tous les accents )
0

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

Posez votre question
cs_Fleuve Messages postés 1 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 14 avril 2009
14 avril 2009 à 20:40
Il faut faire attention au niveau de la convertion en bytes avant l'envoi.

System.Text.Encoding.Default.GetBytes(...)

et donc à la reception vous aurez:

StreamReader reader = new StreamReader(stream,Encoding.Default);
0
amdescombes Messages postés 1 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 18 juin 2009
18 juin 2009 à 14:43
Bonjour Fleuve,
où est-ce que l'on peut intercepter les résultats pour mettre le StreamReader? Il me semble que la classe crée par VisualStudio pour gérer le WebService remplace les caractères accentués par des "?" et donc on a plus accès au résultat d'origine :(

Cordialement,

André
0
Yonel91 Messages postés 1 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 25 septembre 2009
25 sept. 2009 à 18:50
J'ai mis objStreamReader = New StreamReader(fic, System.Text.Encoding.GetEncoding("WINDOWS-1252")) et ça a fonctionné pour moi, ça aidera peut-être quelqu'un d'autre...
0
Rejoignez-nous