1. 程式人生 > >C# .net中cookie值為中文時的亂碼解決方法

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