Spring MVC:如何存储欧元?

时间:2010-07-13 14:00:20

标签: java unicode utf-8 spring-mvc

我正在使用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有关。

3 个答案:

答案 0 :(得分:1)

您可以在这里查看一些内容。

  • 首先是log4j appender的编码。

      

    log4j.appender.emsSpringLogFile.encoding = UTF-8

  •   
  例如,在notepad ++中打开日志文件,并确保编码为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中解决了这个问题。 在同一个问题中,我添加了一些与文本编码相关的其他问题的参考。