今天看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存储中文的更多相关文章

  1. 3、JSP中的Cookie 用于存储 web 页面的用户信息。

    cookie 在平时生活中的运用 存储用户在网页上的登陆信息,包括账号和密码. 有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态.如果你选了,那么一周之内,都不需要再输入 ...

  2. Cookie存储中文报错:java.lang.IllegalArgumentException: Control character in cookie value or attribute.(转)

    项目中做自动登录和保存密码时,Cookie报错Java.lang.IllegalArgumentException,上google查了下 在http://hi.baidu.com/xtxycy/blo ...

  3. JSP中的Cookie

    如何创建Cookie 先引包: import="javax.servlet.http.Cookie" JSP是使用如下的语法格式来创建cookie的: Cookie cookie_ ...

  4. JSP中取COOKIE中指定值得方法【转载】

    Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...

  5. cookie存储中文

    写cookie         Cookie   chineseCookie   =   new   Cookie( "chineseCookie ",   URLEncoder. ...

  6. 如何在JSP中获得Cookie对象

    Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...

  7. Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)

    中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...

  8. ie浏览器 jsp中链接参数为中文的处理

    在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...

  9. 利用JSP中的过滤器解决中文乱码问题

    首先我们创建过过滤器: package com.gbx; import java.io.IOException; import javax.servlet.Filter; import javax.s ...

随机推荐

  1. 杭电ACM 素数判定

    素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. java代码获取ip地址

    public class IpTool { public static void main(String[] args) { IpTool ipTool=new IpTool(); System.ou ...

  3. java键盘录入

    System.out:标准输出设备(默认是:控制台) System.in:标准输入设备(默认是:键盘) --------------------- InputStream in = System.in ...

  4. Debian(Linux)系统目录简单说明

    bin:基础命令执行档 boot:引导装置器的静态链接文件 dev:设备档 etc:主机特定的系统配置 lib:基本共享库及基本内核模块 mnt:用于临时挂载一个文件系统 proc:系统信息的虚拟目录 ...

  5. 在Github上搭建你的博客

    title: blog on github date: 2014-03-24 20:29:47 tags: [blog,github,hexo] --- **用Github写博文** 参考http:/ ...

  6. paip.php-gtk 桌面程序 helloworld总结

    paip.php-gtk 桌面程序 helloworld总结 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.cs ...

  7. Phonegap-----Media

    Everything in the code: <!DOCTYPE html> <html> <head> <title>Media Example&l ...

  8. 笔试题&amp;面试题:找出一个数组中第m小的值并输出

    题目:找出一个数组中第m小的值并输出. 代码: #include <stdio.h> int findm_min(int a[], int n, int m) //n代表数组长度,m代表找 ...

  9. VMware-WorkStation 去掉VM工具栏

    链接地址:http://jingyan.baidu.com/article/8275fc86b95c6246a03cf629.html VMware 是目前用得最多的虚拟机.当开启虚拟机的全屏模式时, ...

  10. BZOJ 1978: [BeiJing2010]取数游戏 game( dp )

    dp(x)表示前x个的最大值,  Max(x)表示含有因数x的dp最大值. 然后对第x个数a[x], 分解质因数然后dp(x) = max{Max(t)} + 1, t是x的因数且t>=L -- ...