servlet 读写cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute

cookie读取中文导致的错误 重点看下面第一行错误信息

  1. java.lang.IllegalArgumentException: Control character in cookie value or attribute.
    org.apache.tomcat.util.http.LegacyCookieProcessor.needsQuotes(LegacyCookieProcessor.java:412)
    org.apache.tomcat.util.http.LegacyCookieProcessor.generateHeader(LegacyCookieProcessor.java:284)
    org.apache.catalina.connector.Response.generateCookieString(Response.java:940)
    org.apache.catalina.connector.Response.addCookie(Response.java:888)
    org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:392)
    servlet.cookieDemo.doPost(cookieDemo.java:27)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

原因
虽然在java文件和jsp文件的字符编码是utf-8,但是在jsp中读取写入Cookie时,仍然有乱码,Cookie处理中文时编码问题,中文采用的是Unicode编码,而英文采用的是ASCII编码,当Cookie保存中文的时候需要对中文进行编码,而且从Cookie中取出内容的时候也要进行解码.
解决办法只需要对其写入和独处都进行编码处理就OK啦
Cookie cookie = new Cookie(“name”,URLEncoder.encode(name, “utf-8”));//对value进行编码

URLDecoder.decode(cookie.getValue(),“utf-8”);//对cookie读的时候进行译码

有这两步应该没有什么问题了。在或者清空一下浏览器中的cookie后重新进行项目。

猜你喜欢

转载自blog.csdn.net/kzw11/article/details/81945193