C# .net中cookie值為中文時的亂碼解決方法
一.cookie的名稱或子cookie的名稱不能為中文,否則無法獲得cookie
這個好辦,名稱不用中文即可
二.cookie的值為中文時候,取cookie的值會出現亂碼
解決辦法:存取cookie時候先解碼和編碼
存cookie,進行編碼:
cookie.Value = HttpUtility.UrlEncode("上海");
取cookie時候,進行解碼: cookieValue = HttpUtility.UrlDecode(cookie.Value);
另外注意:
取子cookie時候,應該先解碼,再根據%號分解,才能取到子cookie的值.
寫Cookie裡,一定要加上UrlEncode,用Request讀Cookie時,一定要加上UrlDecode
示例如下: protected void Page_Load(object sender, EventArgs e) { HttpCookie GoodList = null;
//如果GoodList不為空,則GOODID+1,GoodsName加"樂無煙" if (Request.Cookies["GoodList"] != null) { GoodList = Request.Cookies["GoodList"]; GoodList.Values["GoodsID"] = Server.UrlEncode(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsID"]) + ",1"); GoodList.Values["GoodsName"] = Server.UrlEncode(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsName"]) + ",樂無煙"); GoodList.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(GoodList); } else { //初次寫入Cookie GoodList = new HttpCookie("GoodList"); GoodList.Values["GoodsID"] = Server.UrlEncode("2"); GoodList.Values["GoodsName"] = Server.UrlEncode("無煙鍋"); GoodList.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(GoodList); }
Response.Write(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsID"]) + "<br/>"); Response.Write(Server.UrlDecode(Request.Cookies["GoodList"]["GoodsName"]) + "<hr/>"); }
中文cookie的問題, 在Windows 2000正常, 在Windows 2003 sp1下會偶爾出現亂碼(遇到雙位元組特殊字元時候,例子:「`蹆絀 ), 在windows 2003 SP2下基本亂碼
解決辦法: 採用 Server.UrlEncode(); Server.UrlDecode(); Cookie["MyCookie"] = Server.UrlEncode("中文") Response.Write(Server.UrlDecode(Request.Cookies("MyCookie").Value())) 編碼和解碼。
另外編碼和解碼要一致 System.Web.HttpUtility.UrlDecode 和 System.Web.HttpUtility.UrlEncode System.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode