解决Cookie乱码问题

Posted 雪山非猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Cookie乱码问题相关的知识,希望对你有一定的参考价值。

写了一个cookie的定义和获取,结果我输入中文后,页面报错

报错信息如下:

type Exception report

message An exception occurred processing JSP page /demo1/page3.jsp at line 16

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /demo1/page3.jsp at line 16

13:     </form>
14:     <%
15:         Cookie cookie=new Cookie("message","涓枃");
16:         response.addCookie(cookie);
17:      %>
18: </body>
19: </html>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:575)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)


root cause 

java.lang.IllegalArgumentException: Control character in cookie value or attribute.
    org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:205)
    org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.java:229)
    org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:185)
    org.apache.catalina.connector.Response.generateCookieString(Response.java:1054)
    org.apache.catalina.connector.Response.addCookie(Response.java:996)
    org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:380)
    org.apache.jsp.demo1.page3_jsp._jspService(page3_jsp.java:97)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

解决方案:cookie也要转码的

定义一个cookie:

 1 <%@page import="java.net.URLEncoder"%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>page3</title>
 9 </head>
10 <body>
11     <form action="page3.jsp">
12         <input type="text" name="text" value=""/>
13         <input type="submit" name="提交"/>
14     </form>
15     <%
16     //转码
17         Cookie cookie=new Cookie("message",URLEncoder.encode("中文", "utf-8"));
18         response.addCookie(cookie);
19      %>
20 </body>
21 </html>

page4.jsp(获取cookie)

 1 <%@page import="java.net.URLDecoder"%>
 2 <%@page import="java.net.URLEncoder"%>
 3 <%@ page language="java" contentType="text/html; charset=UTF-8"
 4     pageEncoding="UTF-8"%>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>page4</title>
10 </head>
11 <body>
12 <%
13     String text = request.getParameter("text");
14     out.print("text------------->"+text);
15     Cookie[] cookies=request.getCookies();
16     if(cookies!=null){
17     for(Cookie cookie:cookies){
18         if(cookie.getName().equals("message")){
19         //cookie解码
20             out.print("cookie value------>"+URLDecoder.decode(cookie.getValue(), "utf-8"));
21         }
22     }
23  %>
24  
25 </body>
26 </html>

 

以上是关于解决Cookie乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

jsp中cookie传值中文乱码问题如何解决,快整死我了

Cookie存储中文乱码问题

Cookie存储中文乱码问题

IIS部署后中文Cookie乱码

通过Cookie来记住用户名出现乱码问题(URL编码)

在asp.net中解决cookies中文乱码问题