在完全沒有對中文字串做任何處理動作且將它存入cookie中,就像下面這樣操作。
Dim cookie As New HttpCookie("UserInfo") cookie.Values.Add("Login", "OK") cookie.Values.Add("No", "1234567") cookie.Values.Add("Name", "楊阿全") Response.Cookies.Add(cookie)
但是這樣將中文字串直接存入cookie,在由cookie取出中文字串就會變成亂碼。
'這樣直來直往的存取中文字串,會有亂碼的問題發生。 Request.Cookies("UserInfo")("Name")
最好是先將中文字串使用「HttpUtility.UrlEncode」或是「Server.UrlEncode」函式加以編碼再存入cookie中。
Dim cookie As New HttpCookie("UserInfo") cookie.Values.Add("Login", "OK") cookie.Values.Add("No", "1234567") cookie.Values.Add("Name", Server.UrlEncode("楊阿全")) cookie.Values.Add("nickname", HttpUtility.UrlEncode("阿全")) Response.Cookies.Add(cookie)
而取出編碼過後的中文字串使用「HttpUtility.UrlDecode」或是「Server.UrlDecode」函式解碼,就能順利取出中文字串了。
'這樣經過編碼與解碼讓中文字串可以正常存取,而不會有亂碼的問題發生。 Server.UrlDecode(Request.Cookies("UserInfo")("Name")) HttpUtility.UrlDecode(Request.Cookies("UserInfo")("Name"))
需要注意的幾點(兩者差異如下):
1、HttpUtility.UrlEncode,HttpUtility.UrlDecode是靜態方法,而Server.UrlEncode,Server.UrlDecode是實例方法。
2、Server是HttpServerUtility類的實例,是System.Web.UI.Page的屬性。
3、用HttpUtility.UrlEncode編碼後的字符串和用Server.UrlEncode進行編碼後的字符串對象不一樣
參考來源:不同語系的轉碼、編碼 / HttpUtility.UrlEncode,Server.UrlEncode兩者差異