UTF-8编码,JSP,jQuery,Spring的问题

我在一个apache tomcat 6中有一个带有spring,jsp和jquery的web应用程序,一个jsp页面有一个表单,通过ajax调用whit jquery发送数据到我后端的Spring MultiActionController。

问题在于输入forms的UTF-8字符串。

我已经做了以下事情:

在我的HTML上:

        . . 

在jquery ajax调用:

 $.ajaxSetup({ scriptCharset: "utf-8" ,contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $.ajax( { type: "GET", url: "./saveData.action", contentType: "charset=utf-8", data: { name: $('#name').val(),... 

在tomcat server.xml上:

  

在MultiActionController上

 public ModelAndView saveData(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); 

所以如果在name参数中我放了这样的东西:

玛丽亚

在后端,我得到

MarÃa。

我已经尝试了所有我读到的东西,我不知道错误是什么,谢谢你的帮助:)

一切看起来都很好,直到你在变量中得到参数。 它只是你的后端,仍然需要配置为使用UTF-8。 例如, System.out.println()或您要将检索到的参数发送到的记录器也应使用UTF-8。 或者您存储检索到的参数的数据库也应该使用UTF-8。 或者与该DB交互的JDBC驱动程序。 或者您要将数据写入的文本文件。 等等。

也可以看看:

  • Unicode – 如何使角色正确?

你的具体问题无关 ,这条线

 request.setCharacterEncoding("UTF-8"); 

应该 Spring启动之前执行。它设置POST请求编码,只要Spring在执行操作之前确定请求体,这将失败(请注意,此行对GET请求完全没有影响)。 Spring有一个CharacterEncodingFilter就是这样做的。 在web.xml注册:

  characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter  encoding UTF-8   forceEncoding true    characterEncodingFilter /*  

我遇到了与角色相同的问题,我通过以下方式解决了它:

 request.setCharacterEncoding("utf-8"); StringBuffer requestContent = new StringBuffer(); do { bytesRead = request.getInputStream().readLine(bytes,0,bytes.length); if(bytesRead > 0) { requestContent.append(new String(bytes,0,bytesRead,"UTF-8")); } } while(bytesRead > 0); 

然后从requestContent获取你的字符串以“name =”开头