记录一次关于Cookie、Json中文乱码的解决方法

时间:2022-09-06 13:21:36

今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码。

首先,我们可以确认Json和Cookie都有可能乱码,我们可以在转换Json和写入写出Cookie的时候都加入调试代码,这样可以看到转换Json和Cookie的值。

先解决Json转换问题,乱码的原因无非在于编码问题(一般都是吧)所以在转换Json格式的时候呢我们需要对字符进行编码:

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

对Json编码后中文就可以正常显示了~

Cookie都名称或子cookie的名称或子cookie的名称不能为中文,否则无法获得cookie,所以就不能使用中文,这算是个解决都办法吧,但是如果需要使用的数据中有中文呢,那就只能进行编码了,如下:

存Cookie的时候进行编码:

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

取cookie时候,进行解码:

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

解决方法:

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都方法:


 /// <summary>

 /// 写cookie值,包括中文编码

 /// </summary>

 /// <param name="strName">名称</param>

 /// <param name="strValue">值</param>

 public static void WriteCookie(string strName, string strValue)

 {

 HttpCookie cookie = HttpContext.Current.Request.Cookies[strName];

 if (cookie == null)

 {

 cookie = new HttpCookie(strName);

 }

 cookie.Value = HttpUtility.UrlEncode(strValue, Encoding.GetEncoding("UTF-8"));

 HttpContext.Current.Response.AppendCookie(cookie);

 }

 /// <summary>

 /// 读cookie值,包括中文编码

 /// </summary>

 /// <param name="strName">名称</param>

 /// <returns>cookie值</returns>

 public static string GetCookie(string strName)

 {

 if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[strName] != null)

 {

 return HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[strName].Value.ToString(), Encoding.GetEncoding("UTF-8"));

 }

 return "";

 }

 #region Json序列化

 /// <summary>Json序列化</summary>

 /// <param name="obj">object </param>

 /// <returns></returns>

 public static string ToJson(object obj) {

 var idtc = new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd hh:mm:ss" };

 return JsonConvert.SerializeObject(obj, idtc);

 }

 #endregion

 #region Json反序列化

 /// <summary>反序列化</summary>

 /// <typeparam name="T">类型</typeparam>

 /// <param name="text">json字符串</param>

 /// <returns>类型数据</returns>

 public static T ToObject<T>(string text) {

 return (T)JsonConvert.DeserializeObject(text, typeof(T));

 }

有什么写的不对的欢迎留言~~~~~~

记录一次关于Cookie、Json中文乱码的解决方法

记录一次关于Cookie、Json中文乱码的解决方法的更多相关文章

  1. php 使用phpmailer 发送邮件&lpar;附带中文乱码的解决方法&rpar;

    下载phpmailer ,在程序里包含class.phpmailer.php 类  ,这里有中文乱码的解决方法 实例代码如下 <html> <head> <title&g ...

  2. xShell终端中文乱码完全解决方法

    xShell终端中文乱码完全解决方法 xShell(xShell5)以及其他终端中文乱码的原因无非有三种:(1)Linux系统的编码问题:(2)xShell终端的编码问题: (3)两端的语言编码不一致 ...

  3. Mysql命令行中文乱码的解决方法

    环境:Windows 8 64位,Mysql  5.0.96 for Win64 (x86) 数据库本身安装时默认已经是使用utf8编码的了,但在命令行中执行查询时,查询到的中文依然乱码,解决方法如下 ...

  4. 30&period; CentOS终端命令行显示中文乱码的解决方法

    安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方法:修改/etc/sysconfig/i18n,内容为   代码如下: LANG="zh_CN.GB18030&qu ...

  5. windows下SVN日志反馈中文乱码的解决方法

    转自:https://shiyousan.com/post/635889908703806636 TortoiseSVN中文乱码的问题困扰了我好久,特别是每次使用“以标准差异文件显示修改”时,打开的文 ...

  6. 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法

    在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...

  7. ztree通过ajax加载json数据中文乱码的解决方法&colon;springmvc配置

    一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: async: { enable ...

  8. ueditor 1&period;4&period;3 gbk asp 上传中文乱码 终极解决方法 ie6 ie8 也适用

    [摘要:百度编纂器1.43 gbk asp 题目 1.firefox3.0下 单图上传 面没有了 面多图上传 *的蓝色按钮(即 面击挑选图片)没有表现(附件上传出那个题目) 没有晓得我的水狐吃翔了 ...

  9. Sublime Text 3 中文乱码的解决方法

    Sublime Text 3 中文乱码表现如下图: 解决方法很简单,三步搞定: 步骤一: 下载ConvertToUTF8,下载地址:http://pan.baidu.com/s/1gd5SWmB 步骤 ...

随机推荐

  1. &period;NET 基础 一步步 一幕幕&lbrack;面向对象之构造函数、析构函数&rsqb;

    构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...

  2. C&num;开发微信门户及应用&lpar;6&rpar;--微信门户菜单的管理操作

    前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的技术,一方面是为了和大家对这方面进行互动沟通,另一方面也是专心做好微信应用的底层技术开发,把基础 ...

  3. http&colon;&sol;&sol;www&period;mysqltutorial&period;org&sol;python-mysql-query&sol;

    This tutorial shows you how to query data from a MySQL database in Python by using MySQL Connector/P ...

  4. Linux常用命令:文件与目录

    目录与路径 cd:切换目录 例如:cd ~willhua,则回到用户willhua的主文件夹  cd ~或者cd,则表示回到自己的的主文件夹  cd -,则表示回到上个目录 pwd:显示目前所在目录 ...

  5. Android程序设计-圆形图片的实现

    在android中,google只提供了对图形的圆形操作,而没有实现对图片的圆形操作,所以我们无法实现上述操作,在此我们将使用框架进行设计(下述框架为as编写): https://github.com ...

  6. P2672 推销员

    贪心,水题 #include <bits/stdc++.h> using namespace std; const int maxn = 1000000; struct house { i ...

  7. CAF(C&plus;&plus; actor framework)&lpar;序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)

    这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...

  8. bzoj1899

    显然如果只有一个窗口,是一道贪心的题目,直接让吃饭慢的排在前面即可 两个窗口的话,我们还是根据这个原则 先对吃饭时间降序排序,然后这是一个dp 假如设当前处理到第i个人,当在窗口1的打饭时间确定了,窗 ...

  9. async&sol;await处理异步

    async函数返回一个Promise对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. 看代码: 指定多少毫秒后输 ...

  10. hdu 1059 &lpar;多重背包&rpar; Dividing

    这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...