2009-06-20 [ASP.NET]Cookie的中文問題 5315 0 ASP.NET 摘要:[ASP.NET]Cookie的中文問題 無意間對cookie寫入中文(1大2中3小!-,+)時, 發現取出會產生亂碼爬了一下文,似乎是ASP.NET 2.0之後的Bug, 也找到一些解決方案就是透過編碼與解碼的步驟。但是解碼與解碼的格式那麼多種,而cookie的長又幾乎又被限制在4kb左右,所以找到最適合最短的的編碼方式是最重要的因為要處理中文,所以我選擇 UTF8 再轉 Base64 編碼格式來處理public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void WriteCookit_Click(object sender, EventArgs e) { string str = "1大2中3小!-,+"; HttpCookie hc = new HttpCookie("MyCookie"); hc.Values.Add("msg", str.StringToBase64ByUTF8()); Response.Cookies.Add(hc); Label1.Text = "Cookie寫入成功"; } protected void ReadCookie_Click(object sender, EventArgs e) { HttpCookie hc = Request.Cookies["MyCookie"]; if (hc != null) Label1.Text = hc.Values["msg"].Base64ToStringByUTF8(); } } public static class ExtentionMethodClass { //擴充方法 public static string StringToBase64ByUTF8(this string sourceStr) { byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(sourceStr); return Convert.ToBase64String(byteArray); } public static string Base64ToStringByUTF8(this string sourceBase64) { byte[] byteArray = Convert.FromBase64CharArray(sourceBase64.ToCharArray(), 0, sourceBase64.Length); return System.Text.Encoding.UTF8.GetString(byteArray); } } ASP.NET 回首頁