【发布时间】:2010-07-13 14:00:19
【问题描述】:
我正在使用 Spring 3 MVC,并且我已经设置了一个表单来捕获用户的输入。此表单在我的模型对象 Event 中包含一个用于描述字符串的文本区域。我对应的控制器是这样的:
@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";
}
每当我在表单的描述字段中输入“€”字符并发布表单时,记录的描述都有一个“?”而不是“€”。
我在 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 无关。
【问题讨论】:
-
完全重复:stackoverflow.com/questions/3228443/… 跟进:stackoverflow.com/questions/3230561/… 这个特殊问题已经解决了。您需要集中精力解决 MySQL/JDBC 问题。这远远超出了春天。您最好的选择是编辑您的后续问题,以便将 Spring 排除在问题上下文之外(即专注于 MySQL/JDBC(和 Hibernate?))。还要创建一个“普通的”JDBC 测试用例来自己试验,这样就可以排除 Hibernate 的嫌疑。
-
您好,我再次问了这个问题,因为 MySQL 似乎与这个问题无关。很多其他问题的答案都提供了涉及 MySQL 的解决方案。
-
嗨,Balus,€ 正在转换为 ?在对象甚至持久化到 MySQL 之前。这就是我再次询问的原因...... MySQL 似乎与此无关。
标签: java unicode utf-8 spring-mvc