以前做好的一个页面,突然被告知乱码了,当时吓一跳,好在没有影响线上数据,于是找出原因,以前开发项目几乎全是在火狐上测试使用的,然后今天早上找了一下,发现火狐不报错,其他浏览器报错,于是用IE试了一下,果真就乱码了
条件如下:
url参数中有中文有英文,有数字,由于懒,就不对URL 进行编码了 ,其他的不会受到影响,于是就只把中文的参数进行了编码,传到后台使用C#进行解码。
先科普一下它的家人们:
JavaScript中编码方法有:escape、encodeURI、encodeURIComponent
C#中编码主要方法有:HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString
escape:
对ASCII符号编码
encodeURI:
对于网址编码,不包含参数
encodeURIComponent:
对参数进行编码
------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下是使用方法:
var strUrl = "TradeDate?country=" + encodeURIComponent(country) + "&countryEn=" + countryEn + "&startTime=" + sDate + "&endTime=" + eDate + "&pi=" + viewmodel.pageIndex() + "&pz=" + viewmodel.pageSize();
这里country 国家是中文参数 ,于是在传值的时候先进行编码,到了后台,C#部分代码是这样获取的:
string newCountry = HttpUtility.UrlDecode(country, Encoding.GetEncoding(936));
引用的是using System.Text;
UrlDecode(String, Encoding)该方法是用来对指定编码对象将URL编码的字符串转换为已解读的字符串。
代码页
| Name | 显示名称 |
936
| gb2312 | 简体中文 (GB2312) |
65001
| utf-8 | Unicode (UTF-8) |
因为我们传过来的是简体中文,所以指定解码方案的 Encoding 用936。
注*: