J'ai une requête JavaScript allant à un gestionnaire HTTP ASP.Net (2.0) qui transmet la requête à un service web java. Dans ce système, les caractères spéciaux, comme ceux qui ont un accent, ne sont pas transmis correctement.Problème de codage d'un fichier avec un gestionnaire http .Net
E.G.
- entrée humaine:
Düsseldorf
- devient une demande asynch JavaScript à
http://site/serviceproxy.ashx?q=D%FCsseldorf
, qui est valable dans la norme ISO-8859-1, ainsi que dans UTF-8 pour autant que je peux dire. (sauf si c'est% c3% bc en UTF-8) HttpContext.Current.Request.QueryString.Get("q")
renvoieD�sseldorf
où les problèmes commencent.- mais
HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.GetEncoding("ISO-8859-1"))
retoursD%3fsseldorf
(un « ? ») - et
HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.UTF8)
retoursD%ef%bfsseldorf
Il la valeur ne soit pas décodé ni recodé correctement à être transmis au service java.
- Avis
HttpContext.Current.Request.Url.Query
est?q=D%FCsseldorf&output=json&from=1&to=10
- tandis que
HttpContext.Current.Request.QueryString.ToString()
estq=D%ufffdsseldorf&output=json&from=1&to=10
Pourquoi est-ce, et comment puis-je dire au HttpContext
d'honorer les en-têtes de demande qui comprennent:
Content-Type=application/x-www-form-urlencoded;+charset=UTF-8
et décoder le QueryString
de l'URL en utilisant le jeu de caractères UTF-8. Addendum: Comme le note la réponse, le problème ne réside pas tant dans le décodage que dans le codage; en utilisant escape()
en JavaScript n'échappe pas selon UTF-8, tout en utilisant encodeURIComponent()
fait.
Et là je cherchais un moyen de dire escape() je voulais utiliser UTF-8. Je n'ai pas pensé à regarder encodeURIComponent(). Aussi, j'ai mal compris UTF-8 et pensé% FC pourrait être valide pour les deux. – dlamblin