我正在使用Spring 3 MVC,我已经设置了一个表单来捕获用户的输入。此表单包含一个textarea,用于描述我的模型对象Event中的String。我的相应控制器如下所示:
@RequestMapping(value = "/admin/event/{eventId}/edit", method = RequestMethod.POST)
public String updateEvent(@ModelAttribute Event event) {
logger.info("updateEvent(): Event description: " + event.getDescription());
return "redirect:/admin/event/" + event.getId() + "/edit";
}
每当我在表单的描述字段中输入'€'字符并POST表单时,记录的描述都有'?'而不是'€'。
我在DispatcherServlet前面使用了一个CharacterEncodingFilter,但这还没有解决问题。作为参考,我的web.xml如下所示:
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>baseApp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>baseApp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
关于如何正确捕捉欧元字符的任何想法?
更新
我曾经问过一个类似的问题,之前涉及MySQL,但正如你从上面的演示中看到的那样,€转换为?完全没有MySQL参与,即在POST表单和记录事件描述之间。这就是我再次提出这个问题的原因......看来这个问题与Spring有关。
答案 0 :(得分:1)
您可以在这里查看一些内容。
log4j.appender.emsSpringLogFile.encoding = UTF-8
其次是使用像firebug这样的插件在firefox上检查网页选项卡上的帖子请求和参数值。
第三步是将以下元信息添加到jsp文件的头部:
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
像您一样,将编码过滤器添加到您的web.xml中。
这适用于我在websphere 6.1上部署的webapp。春天的版本是春天3.0.6。
答案 1 :(得分:0)
您确定记录器配置不是问题吗?检查如下:
logger.info("updateEvent(): isCorrect=" +
event.getDescription().contains("\u20ac"));
答案 2 :(得分:0)
尝试将以下内容添加到jsp文件的头部。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
在下面的question中解决了这个问题。 在同一个问题中,我添加了一些与文本编码相关的其他问题的参考。