天天看点

javascript 与asp.net 传递url参数 乱码

javascript 常用的编码格式:escape(), encodeURL(), encodeURIComponent()

escape() 方法:

采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。不会被此方法编码的字符: @ * / +

encodeURI() 方法:

把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

encodeURIComponent() 方法:

把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( ) '因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

我们常会遇到这种情况,前台用Jquery写一些有很炫视觉感观的代码,后台用c#处理,若用别人封装好的东西,有时候会莫名奇妙的出现异常现象。

比如:用jquery写的autocomplete效果有两个版本的脚本,虽然功能一样,但有一个版本在处理传递中文参数时若后台的c#代码不作相应调整则会出现乱码。

版本1:后台不作改动。

经过追踪发现,对url地址进行encodeURL处理的,后台的c#不作任何改动。

例子:对“中”字编码

经过追踪发现,这个版本对url进行了escape()处理。在后台我用string key=context.Request.QueryString["q"].ToString()进行接收,得到的key中一个“中”字,

但是当我把context.Request.QueryString["q"].ToString() 放到监视窗口中后得到的居然是%U4E2D。

版本2:后台需要用HttpUtility.UrlDecode()对参数进行解析,否则是乱码。

例子:对“中”字编码后用context.Request.QueryString["q"].ToString()得到的是%U4E2D。

用HttpUtility.UrlDecode()处理后得到的是“中”字。令人十分困惑的是我用下列方法得到的结果都是个“中”字。

1 string key2 = HttpUtility.UrlDecode(context.Request.QueryString[ " q " ].ToString(), System.Text.Encoding.GetEncoding( " gb2312 " ));

2 string key3 = HttpUtility.UrlDecode(context.Request.QueryString[ " q " ].ToString(), System.Text.Encoding.UTF8);

转载于:https://www.cnblogs.com/mzwang123/archive/2010/04/06/1705092.html

继续阅读