Tengo una solicitud de JavaScript para un controlador HTTP ASP.Net (2.0) que pasa la solicitud a un servicio web de Java. En este sistema, los caracteres especiales, como los que tienen acento, no se transmiten correctamente.Problemas para codificar una diéresis con en .Net http handler
POR EJEMPLO
- de entrada humana:
Düsseldorf
- se convierte en una solicitud asynch JavaScript para
http://site/serviceproxy.ashx?q=D%FCsseldorf
, que es válido en la norma ISO-8859-1, así como en UTF-8 por lo que yo puedo decir. (a menos que sea% c3% bc en UTF-8) HttpContext.Current.Request.QueryString.Get("q")
devuelveD�sseldorf
que es donde comienzan los problemas.HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.GetEncoding("ISO-8859-1"))
pero vuelveD%3fsseldorf
(A '?')- y
HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.UTF8)
vuelveD%ef%bfsseldorf
Por lo tanto, el valor no quede decodificado ni re-codificado correctamente para ser transmitida al servicio de Java.
- Aviso
HttpContext.Current.Request.Url.Query
es?q=D%FCsseldorf&output=json&from=1&to=10
- mientras
HttpContext.Current.Request.QueryString.ToString()
esq=D%ufffdsseldorf&output=json&from=1&to=10
¿Por qué es esto y cómo puede decir que la HttpContext
en honor a las cabeceras de petición que incluyen:
Content-Type=application/x-www-form-urlencoded;+charset=UTF-8
y decodificar el URL QueryString
usando el juego de caracteres UTF-8.
Addendum: Como dice la respuesta, el problema no radica tanto en la decodificación como en la codificación; utilizando escape()
en JavaScript no escapa de acuerdo con UTF-8, mientras que usa encodeURIComponent()
hace.
Y aquí estaba buscando una forma de decir escape() Quería usar UTF-8. No pensé en mirar encodeURIComponent(). También malentendí UTF-8 y pensé que% FC podría ser válido para ambos. – dlamblin