记录一次关于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 步骤 ...
 
随机推荐
- wpf中xaml的类型转换器与标记扩展
			
原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...
 - C#中的字符串——用Stringbuilder类很重要
			
注:这篇文章基本是<C#高级编程>(第七版)第九章的学习笔记. 众所周知,C#中处理字符串通常用的都是string,它其实是.NET基础类System.String类的映射.注意一个是小写 ...
 - [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
			
[C++学习笔记14]动态创建对象 C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实 ...
 - Python 内置函数 —— format
			
科学计数法: >> format(2**20, '.2e') '1.05e+06' 小数 ⇒ 百分数 >> format(.1234, '.1%') 12.3%
 - XMPPFramework
			
XMPP Extensible Messaging and Present Protocol 可扩展消息处理现场协议 特征: XMPP使用tcp传XML流程, 做IM xmpp.org objcio. ...
 - boost::bind应用示例
			
// testBind.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...
 - VC++ 编译libcurl 支持SSL,GZIP(有脚本)
			
由于网上下载的 libcurl 不支持 gzip,只好自己动手编译,期间走了很多弯路,下面是最终成功的记录. 我所使用的环境 Visual Studio 2010 . Windows 7 64 bit ...
 - matlab GUI 编程
			
matlab 语法的简便,在 GUI 上也不遑多让呀: uigetfile [filename, pathname] = uigetfile('*.m', 'choose a m file') 1. ...
 - 构建自己的PHP框架(MVC)
			
完整项目地址:https://github.com/Evai/Aier 规划文件夹 新建 MFFC/app 文件夹,在 app 中创建 controllers.models.views 三个文件夹,开 ...
 - WPF 附加属性的使用
			
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...