現象:近期項目中用到查詢字符串傳值,如果傳遞的是英文一切正常,但是傳遞中文時,使用request.querystring[]得到的是亂碼。
原因:不知道為什么,可能是編碼不一致問題
解決方法1:修改web.config文件添加<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
問題2:如果在網頁中調用的第三方控件和編寫了<script >代碼的話,用gb2312編碼的話,第三方控件會出錯,
原因:js一般用utf-8編碼
解決方法2:不修改web.config文件,只對需要傳值的頁面修改編碼。在Page_Load()中添加解碼語句,將傳遞至解碼。
使用到的命名空間System.collection.Specialized
NameValueCollection nc = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("utf-8"));
string sort = nc["Sort"];
string zgdw = nc["Zgdw"];
這樣,用utf-8編碼的字符串就可以正常解析出漢字了。
解決方法3:asp.net對asp.net頁面傳值
進行傳遞
string Name = "中文參數";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));
進行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));
解決方法4:javascript對asp.net頁面傳值。
<script language="javascript">
function escode()
{
location.href ="B.aspx?Name="+escape(Name);
}
</script>
在asp.net頁面中正常使用Request.QueryString("Name").toString()就可以得到正確的中文了
解決方法5:
<a href="#" onclick="window.location = encodeURI('<%# "PhoneManager.aspx?BMNAME="+DataBinder.Eval(Container.DataItem,"BMNAME")%>')">標題</a>
在asp.net頁面中使用Request["BMNAME"]就可以正常取得漢字了。