• 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");
    才没有产生乱码,具体为什么会产生这样的原因,我尚不知道,不知哪位大神可以解释一下。

  • 相关阅读:
    顶级jQuery树插件
    jQuery 表格
    FlexiGrid使用手册
    gif动图快速制作方法(附工具)(转)
    Maven搭建SpringMVC+Hibernate项目详解(转)
    Gradle cookbook(转)
    Gradle入门系列(转)
    Gradle构建多模块项目(转)
    oracle中imp命令具体解释
    DisplayContent、StackBox、TaskStack笔记
  • 原文地址:https://www.cnblogs.com/ljxxz/p/3557732.html
Copyright © 2020-2023  润新知