Asp.NET 使用cookie存入中文字串變亂碼

在完全沒有對中文字串做任何處理動作且將它存入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兩者差異

發表留言