Echemos un vistazo a las siguientes dos URLs, ¿cumplen los mismos parámetros? aaa.aspx?tag=.net%BC%BC%CA%F5 aaa.aspx?tag=.net%e6%8a%80%e6%9c%af
Parece diferente, pero en realidad todos usan UrlEncode para "tecnología .net", aunque uno es codificación GB2312 y el otro es Utf-8. El siguiente código puede obtener el efecto de codificación anterior:
cadena tmp1 = System.Web.HttpUtility.UrlEncode ("tecnología .net", System.Text.Encoding.GetEncoding("GB2312")); cadena tmp2 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.UTF8);
Nuestras páginas web pueden ser llamadas por otros programas. Por ejemplo, en una página de ASP simplificada en chino en el sistema operativo necesita pasar un parámetro chino a una página ASP.net. Por defecto, en sistemas operativos chinos simplificados, el método Server.UrlEncode de ASP codificará chino con codificación GB2312. Pero por defecto, ASP.net páginas están codificadas en UTF-8. En este caso, cuando usas Request.QueryString["Tag"] para aceptar el valor, no podrás aceptar información china y verás caracteres distorsionados en la depuración paso a paso. Por ahora, aunque Request.QueryString["Tag"] se acepta con caracteres distorsionados, la URL en este momento no está distorsionada.
La solución es analizar tú mismo los parámetros de la URL y luego descifrar los valores de los parámetros según la codificación de GB2312, en lugar de usar la codificación UTF-8 predeterminada de .net. De hecho, Microsoft también proporciona funciones correspondientes, así que no tenemos que usar expresiones regulares para analizar las cadenas de URL nosotros mismos.
El código de la demo es el siguiente:
cadena q = Request.Url.Query;
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312")); Respuesta.Escribir(nv["Etiqueta"]);
Usemos el .NET Reflector de Lutz Roeder para analizar la implementación del método System.Web.HttpUtility.ParseQueryString: Si seguimos comprobando, podemos ver que el código que finalmente gestiona el análisis de cadenas de parámetros URL es el siguiente:
La siguiente función de la clase System.Web.HttpValueCollection implementa el análisis del parámetro URL Aquí vemos que es un análisis realizado por cada personaje.
En cuanto al tipo de método de codificación que nos pasa la otra parte, lo mejor es pasarlo como parámetro, para poder descifrarlo según este parámetro del usuario. |