class="MsoNormal">Cookie中存中文报错:Control character in cookie value, consider BASE64 encoding your value
?
功能需求:当用户登录时,将用户的用户名、密码保存到本地的Cookie中,下次登录时,直接获取之前的cookie,从而不需要输入。
之前测试一直没问题,今天当创建一个中文用户,登录时报错,报错代码
(String username = “登录名2” ;) Cookie usernameCookie = new Cookie(“username”, username); usernameCookie.setMaxAge(timeout); response.addCookie(usernameCookie); //(断点调试发现是这句话报错)
?
?
后来查找才知道是转码的问题
Cookie只支持ASCII字符,而且不能有逗号、分号和空白。
?
储存中文解决方案,
存入时用URLEncoder.encode()转码
Cookie usernameCookie = new Cookie(“username”,URLEncoder.encode(username, "UTF-8")); usernameCookie.setMaxAge(timeout); response.addCookie(usernameCookie);
?
取出时用URLDecoder.decode()解码
Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie tc : cookies) { if (tc.getName().equals(“username”)) { // username = tc.getValue(); try { username = URLDecoder.decode(tc.getValue(),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } }
?