Accepter codé en UTF-8 dans les chaînes de ASP.NET WebService
J'ai un ASP.NET WebService qui ressemble à quelque chose comme ceci:
[WebMethod]
public static void DoSomethingWithStrings(string stringA, string stringB)
{
//and so on
}
Une troisième partie de l'application doit appeler ce webservice. Cependant, cette application codant pour les chaînes en tant que UTF-8 et de tous les accents sont remplacés par des '??'. Je peux afficher les appels et les caractères spéciaux sont mis en forme bien:
<?xml version="1.0" encoding="utf-8" ?>
<!-- ... -->
<SoapCall>
<DoSomethingWithStrings>
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test</stringB>
</DoSomethingWithStrings>
</SoapCall>
Ce produit la sortie suivante, quand j'ai tout simplement l'impression que les cordes à l'intérieur du webservice méthode:
?? - ?? - ??
Ceci est un test
Comment puis-je configurer le WebService pour accepter codé en UTF-8 cordes?
mise à Jour
Fiddler me dit aussi que le contenu du jeu de caractères du type de la requête http est UTF-8.
mise à Jour 2
J'ai essayé d'ajouter le code suivant à global.asax
à des fins de débogage:
public void Application_BeginRequest(object sender, EventArgs e)
{
using (var reader = new System.IO.StreamReader(Request.InputStream))
{
string str = reader.ReadToEnd();
}
}
Ce lit le véritable SAVON d'appel. Le StreamReader
s l'encodage est défini à l'UTF-8. Le SAVON d'appel semble correct:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<DoSomethingWithStrings xmlns="http://www.tempuri.org/">
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test!</stringB>
</DoSomethingWithStrings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Dans le web.config
fichier de la mondialisation paramètres sont correctement définis:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="de-DE" uiCulture="de-DE" />
De sorte qu'il ressemble à quelque chose que désérialise le message SOAP ne pas utiliser l'UTF-8, mais le codage ASCII.
- Juste un point technique, mais crypté n'est pas le bon adjectif. En tant que UTF-8 est tout simplement un jeu de caractères codés serait plus précis.
- Bien sûr, vous avez raison, désolé pour ce mix up 🙂
Vous devez vous connecter pour publier un commentaire.
Enfin, il s'avère que quelque chose n'allait pas dans l'acceptation HTTP Messages. Je ne sais pas vraiment ce que manipule le HTTP-Request, mais j'ai trouvé une solution pour ce. Eventhough Fiddler m'a montré le bon type de contenu (
text/xml; charset=utf-8
) dans monApplication_BeginRequest
laRequest.RequestContext.HttpContext.Request.ContentType
était justetext/xml
, qui conduisent à un repli à défaut (ASCII) codage de la ASMX sérialiseur. J'ai ajouté le code suivant à laApplication_BeginRequest
gestionnaire et tout fonctionne pour le moment.Merci pour votre aide!
Essayez ceci:-
REMARQUE:-
L'appel SOAP est décodé comme ASCII quelque part - chacun des trémas sont 2 octets avec peu élevé définies, qui se transforme en
??
lors du décodage ASCII.Donc, quelque chose comme ce qui se passe:
Pour vérifier ce qui se passe pour vous, vous devriez comparer
stringA == "Ä - Ö - Ü"
plutôt que de l'impression quelque part.Je pense que tu pourrais commencer par faire un projet à l'échelle de la recherche pour "ASCII" et ensuite travailler à partir de là, si vous trouvez quoi que ce soit.
Vous pouvez également essayer de
En vertu de la
<system.web>
balise dansWeb.config
fichier.J'ai eu le même problème. Service web Asmx converti mon UTF-8 au format ASCII ou, pour mieux dire ??????. Votre post m'a beaucoup aidé.
La solution que j'ai trouvé a été de changer de version de protocole SOAP de 1.1 à 1.2
Je veux dire:
eu le problème. Mais quand j'ai changé ma demande de SOAP 1.2:
Le problème a été résolu.