JSP中使用cookie存储中文
今天看J2EE的时候,看见书上讲到使用cookie保存信息的时,看到书上举得例子都是英文的键值对,我就想中文是不是一样呢?试了一下果然不一样。废话不多说,直接上代码:
比如说有addCookie.jsp代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>增加cookie</title>
</head>
<body>
<%
String name = request.getParameter("name");
Cookie c = new Cookie("username",name);
c.setMaxAge(3600);
response.addCookie(c);//添加cookie
%>
</body>
</html>
在地址栏中输入localhost:8080/webDemo/addCookie.jsp?name=测试名字即可完成cookie添加。
下面就该是取出cookie了,getCookie.jsp代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>增加cookie</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();//取出cookie
for(Cookie cc:cookies)//遍历找到对应的cookie
{
if(cc.getName().equals("username"))
{
out.println(cc.getValue());
}
}
%>
</body>
</html>
但是当在地址栏中输入localhost:8080/webDemo/getCookie.jsp时发现如下报错:
之所以造成这种情况,是因为编码原因根据RFC 2109中的规定,在Cookie中只能包含ASCII的编码。
那么就只能在设置cookie时,将中文编码一下就行了。改进代码如下:
<%
String name = request.getParameter("name");
byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");//得到参数的中文字符串形式
Cookie c = new Cookie("username",URLEncoder.encode(strName,"UTF-8"));
c.setMaxAge(3600);
response.addCookie(c);
%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cc:cookies)
{
if(cc.getName().equals("username"))
{
String str = URLDecoder.decode(cc.getValue(),"UTF-8");//解码
out.println(str);
}
}
%>
其他地方问题不大,就是在下面这段代码中,有人做的不一样。
byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");//得到参数的中文字符串形式
Cookie c = new Cookie("username",URLEncoder.encode(strName,"UTF-8"));
我搜了很多资料,都只有一段代码,形如:Cookie c = new Cookie("username",URLEncoder.encode("孙悟空","UTF-8"));
把中文直接放在encode方法的参数位置,看起来可以直接在name=request.getParameter("name");后就调用上面的Cookie c = new Cookie("username",URLEncoder.encode(name,"UTF-8"));代码段,看起来好像没有错,但是我实践中发现会产生乱码,我用的是火狐浏览器,然后我就加了两段代码,就是:byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");才没有产生乱码,具体为什么会产生这样的原因,我尚不知道,不知哪位大神可以解释一下。
JSP中使用cookie存储中文的更多相关文章
- 3、JSP中的Cookie 用于存储 web 页面的用户信息。
cookie 在平时生活中的运用 存储用户在网页上的登陆信息,包括账号和密码. 有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态.如果你选了,那么一周之内,都不需要再输入 ...
- Cookie存储中文报错:java.lang.IllegalArgumentException: Control character in cookie value or attribute.(转)
项目中做自动登录和保存密码时,Cookie报错Java.lang.IllegalArgumentException,上google查了下 在http://hi.baidu.com/xtxycy/blo ...
- JSP中的Cookie
如何创建Cookie 先引包: import="javax.servlet.http.Cookie" JSP是使用如下的语法格式来创建cookie的: Cookie cookie_ ...
- JSP中取COOKIE中指定值得方法【转载】
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- cookie存储中文
写cookie Cookie chineseCookie = new Cookie( "chineseCookie ", URLEncoder. ...
- 如何在JSP中获得Cookie对象
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
- ie浏览器 jsp中链接参数为中文的处理
在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...
- 利用JSP中的过滤器解决中文乱码问题
首先我们创建过过滤器: package com.gbx; import java.io.IOException; import javax.servlet.Filter; import javax.s ...
随机推荐
- Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors
在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...
- C++对C语言的非面向对象特性扩充(2)
上一篇随笔写了关于C++在注释,输入输出,局部变量说明的扩充,以及const修饰符与C中的#define的比较,也得到了几位学习C++朋友们的帮助讲解,十分感谢,我也希望欢迎有更多学习C++的朋友一起 ...
- [LeetCode]题解(python):008-String to Integer (atoi)
题目来源: https://leetcode.com/problems/string-to-integer-atoi/ 题意分析: 这道题也是简单题,题目意思是要将字符串转化成int.比如‘123’转 ...
- django-celery
在settings.py里installed_apps里添加 djcelery 需安装django-celery 在settings末端添加 import djcelery djcelery.setu ...
- C 语言中的变量为什么不能以数字打头
C 语言中的变量为什么不能以数字打头? C 语言中的变量为什么不能以数字打头? 不要告诉我编译原理书上有.我暂时看不懂. 除了下面的解释外, “假如变量名允许以数字开头的话,那么语法分析器在解析一个全 ...
- 【转】2014区域赛小结(牡丹江&&鞍山)by kuangbin
Posted on 2014年10月20日 by kuangbin 最后的两场区域赛结束了! ICPC生涯的最后两场区域赛,选择了前两个赛区——牡丹江和鞍山,主要是时间比较靠前,而且我向来对东北赛区有 ...
- 商业模式画布及应用 - MBA智库文档
商业模式画布及应用 - MBA智库文档 商业模式画布及应用
- 微软阵营稳定的好消息:.NET开源、Visual Studio
自由
今天各个IT社区,头版头条说的是微软.NET开源了.宇宙中最好的IED–Visual Studio Community 2013将免费提供给用户的消息. <宇宙中最强大的开发环境免费了! > ...
- Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...
- iOS Responder Chain 响应者链
一.事件分类 对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Moti ...