今天修改原来的站点,有几个session和cookies乱码问题,然后又好好看了一下关于编码这块的内容。
大概是:登录处,用session记录了一点中文内容。然后cookies也记录了一点中文内容,取出来以后一下session乱码一下cookie乱码
翻代码查了一下代码,在统一设置cookies的时候,使用了 Server.UrlEncode ,但是发现,登录后cookies取出来是乱码,
然后换为 HttpUtility.UrlEncode 则不乱码。
猜测这两个方法默认用的编码格式不一样,后来观察网页发现,登录处竟然是gb2312而首页调用cookies的地方是utf-8 醉了,后来发现是这个文件夹下单独有一个web.config设定了编码,也不知道当初为什么这样子做。。。单独文件夹还设置单独编码。估计是因为拷贝过去没删除。。。。按道理整站不应该是统一一个编码吗?
然后猜想他们默认编码方式不一样后,百度之,如下文章所说,果然是默认编码方式不一,遂改之,然后整改了所有地方单独设置编码的。不再乱码。
一、HttpUtility.UrlEncode 方法
1、public static string UrlEncode(byte[])
将字节数组转换为已编码的 URL 字符串。
2、public static string UrlEncode(string)
对 URL 字符串进行编码。
3、public static string UrlEncode(string, Encoding)
使用指定的编码对象对 URL 字符串进行编码。
4、public static string UrlEncode(byte[], int, int)
从数组中的指定位置开始一直到指定的字节数为止,将字节数组转换为 URL 编码的字符串。
二、Server.UrlEncode方法
1、public string UrlEncode(string)
对字符串进行 URL 编码,并返回已编码的字符串。
2、public void UrlEncode(string, TextWriter)
URL 对字符串进行编码,并将结果输出发送到 TextWriter 输出流。
三、Server.UrlEncode与HttpUtility.UrlEncode的区别
1、HttpUtility.UrlEncode,HttpUtility.UrlDecode是静态方法,而Server.UrlEncode,Server.UrlDecode是实例方法。
2、Server是HttpServerUtility类的实例,是System.Web.UI.Page的属性。
3、Server.UrlEncode的编码方式是按照本地程序设置的编码方式进行编码的,而HttpUtility.UrlEncode是默认的按照utf-8格式进行编码的,如果需要指定HttpUtility.UrlEncode的编码方式,则需要:HttpUtility.UrlEncode("学习也休闲", Encoding.GetEncoding("gb2312"));
4、两者都会如下转换字符:空格会被转换为加号、非字母数字字符会被转换为他们的十六进制表现形式。