Ajax乱码问题
Ajax中文乱码问题 1.js代码
var userName=$("#userName").val(); var url = "user/login.action?userName=" + encodeURI(encodeURI(userName)); //或者 var url =encodeURI(encodeURI( "user/login.action?userName=" + userName)); 2.java代码
String userNameStr=URLDecoder.decode(request.getParameter("userName"),"UTF-8"); 这样就可以了,也可以遍历所有的值: for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { String name = (String) e.nextElement(); String str = request.getParameter(name); String value = java.net.URLDecoder.decode(str,"UTF-8"); System.out.println(value); }注意事项: 1.连续两次调用ecodeURI的原因:是因为Java中的request.getParameter(String)方法会进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。 而URI编码两次后, request.getParameter(String) 函数得到的是原信息URI编码一次的内容。接着用 java.net.URLDecoder.decode(String str,String codename) 方法,将已经编码的URI转换成原文。 2.在js里面可以alert(url),发现编码之后的格式我们已经“不认识”了(如果参数值是中文的);在java里面可以先获取,发现我们不认识,但是应该含有“%”这样的字样,这是unicode编码格式的;java.net.URLDecoder.decode是解码方法,和编码相对。就如同加密解密一样。 3..并不是所有的请求都要转码,如果是非ajax的请求,可以在web.xml里面添加如下代码使用spring的过滤器进行编码
<!-- 字符编码 filter 统一使用 "UTF-8"(文件/请求) --> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |