jquery在发送ajax数据时,使用了js的内置方法encodeURIComponent对数据进行了处理,该方法的作用是把数据以UTF-8的方式编码,所以页面的编码方式无论是GBK、UTF-8等,在服务器端获取数据前使用request.setCharacterEncoding("UTF-8"),就可以获取到正常的中文字符了;但是,在实际项目中这个简单的方案并不能解决所有情况。 我们做如下处理: 1.在使用jquery的 jQuery.ajax() 方法时,在参数中增加一个设置{contentType : "application/x-www-form-urlencoded; charset=utf-8"},这时在服务器端使用方法request.getCharacterEncoding()(PS:这时以java代码为例)就可以获取到编码格式为UTF-8,所以不需要进行任何处理就可以获取到正常的中文字符。 2.以POST方式提交表单时,request.getCharacterEncoding()获取到的编码格式为null,这时就要根据项目的编码方式进行解码了。 还可以把这部分代码写在过滤器中: package com.lianzt.filter; public class EncodingFilter implements Filter { private String encoding = null; public EncodingFilter() { } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (request.getCharacterEncoding() == null) { request.setCharacterEncoding(encoding); } response.setContentType("text/html;charset=" + encoding); chain.doFilter(request, response); } public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); } } 在web.xml中加上以下代码: <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.lianzt.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>gbk</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这样在servlet就可以获取到正常的表单数据了,前提是在调用jQuery.ajax()时,要加上{contentType : "application/x-www-form-urlencoded; charset=utf-8"}参数,可以把这个参数使用jQuery.ajaxSetup()方法设置为全局ajax参数,不需要每次ajax请求都加上。