近来,做项目的过程之中,用到了Cookie中存放中文字符的问题,平时不怎么用,一旦用到了还真是让人恶心!
由于Cookie是存放在本地的,而我们是通过服务器端向本地写数据,那么网络的编码格式就会影响了汉字的正常存储导致汉字乱码。
通常在给汉子进行编码时有两种常用的方法:HttpUtility.UrlEncode 和 Server.UrlEncode,虽然编码/解码成对使用没问题,但是毕竟是两种方法,总该是有区别的,网上查了一下,区别如下:
1、HttpUtility.UrlEncode(向Cookie中写时用),HttpUtility.UrlDecode(从Cookie中读时用)是静态方法,而Server.UrlEncode(写),Server.UrlDecode(读)是实例方法。
例如:
2、Server是HttpServerUtility类的实例,是System.Web.UI.Page的属性。
3、用HttpUtility.UrlEncode编码后的字符串和用Server.UrlEncode进行编码后的字符串对象不一样
Server.UrlEncode 可以根据你页面定义好的编码方式进行编码。
而 HttpUtility.UrlDecode则默认以utf8来编码。 不然你需要自己指定编码方式:
Encoding gb2312= Encoding.GetEncoding("gb2312");
string v5= HttpUtility.UrlEncode("中文汉字", gb2312);
而 Server.UrlDecode则默认调用web.config中<globalization />节点中指定来编码
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />
string v3= Server.UrlEncode("中文汉字");
这两种方式,在不使用web.config默认的编码方式时,HttpUtility.UrlEncode比较好用,但是不方便;如果是使用web.config统一编码,则Server.UrlDecode比较好。另外就是,如果是下载文件而定义编码方式,最好使用HttpUtility.UrlEncode
二、删除Cookie的操作
找出要删除的cookie
c.setMaxAge(0); 设置其时长为0,让其立即过期
response.addCookie(c); 执行添加
注意:在做项目的过程中,遇到了一个问题,当执行删除Cookie后,我没有跳转到客户端,而是直接跳转到servlet中,在转发到其他页面,(所以虽然执行了删除Cookie的代码,但是,实际上Cookie并没有被删除,因为Cookie是客户端的数据,而我并没有在客户端执行之一操作)
所以在执行删除Cookie的代码之后,要重定向到客户端之后,Cookie才能被删除
补充:在结合Cookie和Session使用时,当删除Cookie时要注意,如果删除了JSESSIONID。那么在本次会话中session就会获取不到了。所以这是要注意的一点。