js函数:encodeURI、decodeURI 是按照utf-8编码的,和webconfig里配置的编码方式无关(因为js函数不解析webconfig),没有直接的js方法可以做gb2312编码。
asp.net函数:Request.QueryString["key"] 和 Response.Redirect("WebForm1.aspx?key=中文") 会对中文字符自动编码,编码方式按照webconfig中的配置,默认为“utf-8”,可以对单个页面设置编码。
服务器端编码、解码:HttpUtility.UrlEncode(); HttpUtility.UrlDecode();默认编码方式为“utf-8”,可以由参数指定具体编码格式。
要对url参数做不同于该页面编码格式的解码,不能调用Request.QueryString["key"] ,因为它对自动解码不能指定别的编码格式,正确的方法是:NameValueCollection parames = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("utf-8 或其他格式")); string v = parames.Get("key");
前端方法window.open(url)、<a>方式,不会对中文自动编码。
url参数中可能出现乱码的情况有:
1、被访问的页面为 gb2312 编码,调用的时候用js方法encodeURI()做了编码;
2、js方式调用时,中文参数没有做编码有时候会出现乱码,可能跟环境配置有关。
通常的方案:
1、编码方式采用“utf-8”(asp.net默认),对url中的中文参数做编码(默认编码),编码的目的主要是为了防止因浏览器版本不同而可能引起的乱码。
页面乱码:
通常原因是页面的编码和浏览器编码不一致。浏览器会根据页面的编码来选择相应的编码,当找不到该编码时就会乱码。