Cookie不能携带中文的解决方法
在做一个十天免登陆功能的时候,需要用到Cookie,并且需要往里面添加用户名以及密码。在测试的时候,报了一个错误:
出错的代码为:
从报错信息来看,是说我的Cookie的值中有非法的参数或者Cookie值中携带有非法的控制字符,例如换行符:”\r\n”、”\n”
这个cookie1里存的是:username:会飞的猪。也就是往cookie里添加了中文,我去网上搜了一下,果然cookie是不能直接携带中文的,这是不支持的。
但是如果想携带中文,有没有办法?当然,只要将cookie中有中文的key或者value用UTF-8或者gbk进行编码(只要是支持中文的编码就行),早期版本的tomcat推荐使用的是编码是:BASE64,早前版本的tomcat如果出现:cookie有非法参数的错,报错如下:
Control character in cookie value, consider BASE64 encoding your value,但是现在版本的tomcat好像都不推荐使用这个编码了,还是使用UTF-8吧。
编码后将其存入cookie中,最后取出来的时候,再用相同的编码进行解码即可。
编码:URLEncoder.encode("中文key或者中文value","UTF-8″);
解码:URLDecoder.decode(cookies.getValue(),"UTF-8″);
URLEncode及URLDecode在包java.net里面。
我这里是用户名使用了中文,所以需要将用户名编码以及解码一下:
编码:
解码:
这样就没有问题了。
对了,关于cookie为什么叫cookie,而cookie翻译过来就是曲奇饼干。听说是因为,当初发明cookie的这间公司提供给员工的零食是曲奇饼干,而曲奇饼干有一种特殊的味道。吃多了的话,人的身上会带有这种气味。一到大街上,人们闻到这种味道就知道了这个人是那间公司的员工。其实cookie也可以算是一个人身份的证明吧,不知道这个段子是不是真的,反正也侧面表现了cookie的作用。