Cookie默认支持的编码方式是ASCII码。不能对中文进行编码和解码。
当Cookie直接写入中文会引发以下异常。
Caused by: java.lang.IllegalArgumentException: Control character in cookie value or attribute.
at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:205)
at org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.java:229)
at org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:186)
at org.apache.catalina.connector.Response.generateCookieString(Response.java:1055)
at org.apache.catalina.connector.Response.addCookie(Response.java:997)
at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:380)
at com.ctcc.dt_telecom.servlet.UserServlet.login(UserServlet.java:61)
... 28 more
这里使用在存入时使用 URLEncoder.encode(name,"utf-8") 编码,
取出时用 URLDecoder.decode(cookie1.getValue(), "utf-8"); 解码,就不会出现问题了
具体例子如下:
String name="张三";
//编码
Cookie cookie1=new Cookie("name", URLEncoder.encode(name,"utf-8"));
response.addCookie(cookie1);
//解码
String cookieValue1 = URLDecoder.decode(cookie1.getValue(), "utf-8");
System.out.println(cookieValue1);
用这个方法就完美解决了cookie存取中文的问题了。