浏览器自动转换URL编码产生乱码问题

如果网址中含有汉字,浏览器会自动将其转换成URL编码,而在接收端,它又自动转换回来。

 

大部分时候都没什么问题,但有时候就很讨厌。因为生成这种URL编码,编码时的字符集和解码字符集不一定相同,比如编码时用GB2312,解码用UTF-8,就出现乱码。

 

这个时候,提取到的参数,自然就乱。

 

解决之道是不要用Request.QueryString来提取,而是用Request.RawUrl来获取。后者是原始URL,没有自动解码的。自己获取,自己处理。

 

 

//scode = Request.QueryString["word"];

int p = Request.RawUrl .IndexOf("word=");

string scode = Request.RawUrl.Substring(p + 5);

 

另,在浏览器的地址栏进行get传参时,浏览器会自动进行一次UrlDecode()的解码,然后才会传给程序使用,也就是会先解码一次,所以如果传输中文的参数时,应该进行2次UrlEncode()编码给浏览器,程序再用一次UrlDecode解码即可,亲身试验过,确实如此。

posted on 2017-08-08 16:34  itjeff  阅读(3660)  评论(1编辑  收藏  举报

导航