记录一次关于Cookie、Json中文乱码的解决方法
今天工作上遇到一个问题,需要把一个对象集合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中文乱码的解决方法的更多相关文章
- php 使用phpmailer 发送邮件(附带中文乱码的解决方法)
下载phpmailer ,在程序里包含class.phpmailer.php 类 ,这里有中文乱码的解决方法 实例代码如下 <html> <head> <title&g ...
- xShell终端中文乱码完全解决方法
xShell终端中文乱码完全解决方法 xShell(xShell5)以及其他终端中文乱码的原因无非有三种:(1)Linux系统的编码问题:(2)xShell终端的编码问题: (3)两端的语言编码不一致 ...
- Mysql命令行中文乱码的解决方法
环境:Windows 8 64位,Mysql 5.0.96 for Win64 (x86) 数据库本身安装时默认已经是使用utf8编码的了,但在命令行中执行查询时,查询到的中文依然乱码,解决方法如下 ...
- 30. CentOS终端命令行显示中文乱码的解决方法
安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方法:修改/etc/sysconfig/i18n,内容为 代码如下: LANG="zh_CN.GB18030&qu ...
- windows下SVN日志反馈中文乱码的解决方法
转自:https://shiyousan.com/post/635889908703806636 TortoiseSVN中文乱码的问题困扰了我好久,特别是每次使用“以标准差异文件显示修改”时,打开的文 ...
- 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法
在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...
- ztree通过ajax加载json数据中文乱码的解决方法:springmvc配置
一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: async: { enable ...
- ueditor 1.4.3 gbk asp 上传中文乱码 终极解决方法 ie6 ie8 也适用
[摘要:百度编纂器1.43 gbk asp 题目 1.firefox3.0下 单图上传 面没有了 面多图上传 中央的蓝色按钮(即 面击挑选图片)没有表现(附件上传出那个题目) 没有晓得我的水狐吃翔了 ...
- Sublime Text 3 中文乱码的解决方法
Sublime Text 3 中文乱码表现如下图: 解决方法很简单,三步搞定: 步骤一: 下载ConvertToUTF8,下载地址:http://pan.baidu.com/s/1gd5SWmB 步骤 ...
随机推荐
- 解决eclipse中找不到jar包问题
当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, ServletActionContext找不到的情况,解决办法: (注:我已经引用了struts2的jar ...
- Leetcode 144 Binary Tree Preorder Traversal 二叉树
二叉树的基础操作:二叉树的先序遍历(详细请看数据结构和算法,任意本书都有介绍),即根,左子树,右子树,实现方法中还有用栈实现的,这里不介绍了 /** * Definition for binary t ...
- Android到您的计算机使用命令行屏幕捕获和出口
声明:本博客为原创博客,未经同意.不得转载! 原文链接为http://blog.csdn.net/bettarwang/article/details/27819525 大多数人最经常使用的截屏方法可 ...
- ISO9000 质量管理和质量保证系列国际标准
(一)ISO9000认证的背景国际标准化组织(ISO)是世界上最主要的非政府间国际标准化机构,成立于二次世界大战以后,总部位于瑞士日内瓦.该组织的目的是在世界范围内促进标准化及有关工作的发展,以利于国 ...
- hann function
hann function 是一种离散型窗函数,定义如下: w(n)=12(1−cos(2πnN−1))=sin2(πnN−1) 窗口的长度为 L=N+1; hann function 以及其傅里叶响 ...
- nginx配置http跳转https
配置相当简单,在配置文件头部加一行,如下: server { listen *:;//监听80端口 https://www.chenruhui.com$request_uri;//需要跳转的网页 } ...
- OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)
要求在.Net端生成公钥私钥对. 然后在.Net端使用RSA公钥加密:在Linux端使用RSA私钥解密. 最初的尝试是:.Net端使用RSACryptoServiceProvider; linux端使 ...
- Nginx之Eclipse开发环境配置
C开发的IDE很多,为什么使用Eclipse?原因: 1. 历史原因:使用eclipse时间长,比较熟悉. 2. 功能原因:使用eclipse查看源码,可以在各个函数与头文件间直接跳转.这是所谓号称& ...
- 用友u8各版本在输出的时候报错提示:外部数据库驱动程序(1)中的意外错误
从10月12日起很多U8用户反馈,在各版本U8中输出报表时软件报错,报错内容“外部数据库驱动程序(1)中的意外错误”,经初步分析有以下解决方案:1.卸载微软的补丁:(1)如果是PC操作系统(一般是客户 ...
- 增加收入的 6 种方式(很多公司的模型是:一份时间卖多次。比如网易、腾讯。个人赚取收入的本质是:出售时间)good
个人赚取收入的本质是:出售时间.从这个角度出发,下面的公式可以描述个人收入: 个人收入 = 每天可售时间数量 * 单位时间价格 * 单位时间出售次数 在这个公式里,有三个要素: 每天可出售的时间数量 ...