記錄一次關於Cookie、Json中文亂碼的解決方法

今天工做上遇到一個問題,須要把一個對象集合List<Model>存入一個Cookie,按照原來都封裝方法存入都ok,可是到取值都時候中文會變成亂碼。json

首先,咱們能夠確認JsonCookie都有可能亂碼,咱們能夠在轉換Json和寫入寫出Cookie的時候都加入調試代碼,這樣能夠看到轉換Json和Cookie的值。cookie

先解決Json轉換問題,亂碼的緣由無非在於編碼問題(通常都是吧)因此在轉換Json格式的時候呢咱們須要對字符進行編碼編碼

Encoding encode = System.Text.Encoding.GetEncoding("Unicode");

Json編碼後中文就能夠正常顯示了~spa

 

Cookie都名稱或子cookie的名稱或子cookie的名稱不能爲中文,不然沒法得到cookie,因此就不能使用中文,這算是個解決都辦法吧,可是若是須要使用的數據中有中文呢,那就只能進行編碼了,以下:調試

Cookie的時候進行編碼:code

cookie.Value = HttpUtility.UrlEncode("Name");

 

cookie時候,進行解碼:orm

cookieValue = HttpUtility.UrlDecode(cookie.Value);

 

 

最後,編碼和解碼要保持一致:對象

System.Web.HttpUtility.UrlDecode

System.Web.HttpUtility.UrlEncode
System.Web.HttpContext.Current.Server.UrlDecode

System.Web.HttpContext.Current.Server.UrlEncode

 

 

解決方法:blog

1.先把集合轉成Json字符串(我使用下面轉換Json方法的時候沒有亂碼):字符串

string json = ToJson(List<Model>);

 

2.接下來咱們把轉換好的Json字符串寫入Cookie:

WriteCookie1("cook", json);

 

這樣就寫入成功了!!!

 

3.接下來就能夠經過如下代碼取出數據:

string jsonStr =GetCookie("cook");//獲取json

 

4.獲取實體集合

List<Model> list=ToObject<List<Model>>(jsonStr);//json轉換成實體集合

 

如下是 存取Cookie、轉換Json都方法:

 

 1  
 2 
 3 /// <summary>
 4 
 5 /// 寫cookie值,包括中文編碼
 6 
 7 /// </summary>
 8 
 9 /// <param name="strName">名稱</param>
10 
11 /// <param name="strValue"></param>
12 
13 public static void WriteCookie(string strName, string strValue)
14 
15 {
16 
17 HttpCookie cookie = HttpContext.Current.Request.Cookies[strName];
18 
19 if (cookie == null)
20 
21 {
22 
23 cookie = new HttpCookie(strName);
24 
25 }
26 
27 cookie.Value = HttpUtility.UrlEncode(strValue, Encoding.GetEncoding("UTF-8"));
28 
29 HttpContext.Current.Response.AppendCookie(cookie);
30 
31 }
32 
33 /// <summary>
34 
35 /// 讀cookie值,包括中文編碼
36 
37 /// </summary>
38 
39 /// <param name="strName">名稱</param>
40 
41 /// <returns>cookie值</returns>
42 
43 public static string GetCookie(string strName)
44 
45 {
46 
47 if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[strName] != null)
48 
49 {
50 
51 return HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[strName].Value.ToString(), Encoding.GetEncoding("UTF-8"));
52 
53 }
54 
55 return "";
56 
57 }
58 
59 
60 #region Json序列化
61 
62 /// <summary>Json序列化</summary>
63 
64 /// <param name="obj">object </param>
65 
66 /// <returns></returns>
67 
68 public static string ToJson(object obj) {
69 
70 var idtc = new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd hh:mm:ss" };
71 
72  
73 
74 return JsonConvert.SerializeObject(obj, idtc);
75 
76 }
77 
78 #endregion
79 
80  
81 
82 #region Json反序列化
83 
84 /// <summary>反序列化</summary>
85 
86 /// <typeparam name="T">類型</typeparam>
87 
88 /// <param name="text">json字符串</param>
89 
90 /// <returns>類型數據</returns>
91 
92 public static T ToObject<T>(string text) {
93 
94 return (T)JsonConvert.DeserializeObject(text, typeof(T));
95 
96 }

有什麼寫的不對的歡迎留言~~~~~~

相關文章
相關標籤/搜索