【问题标题】:Spring MVC: How to store € character?Spring MVC:如何存储€字符?
【发布时间】: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


【解决方案1】:

您可以在此处查看一些内容。

  • 首先是 log4j appender 的编码。

    log4j.appender.emsSpringLogFile.encoding=UTF-8

例如,在记事本 ++ 中打开日志文件并确保编码为 UTF-8。
  • 其次是在 firefox 上使用 firebug 之类的插件,在 net 选项卡上检查发布请求和参数值。

  • 第三个是将以下元信息添加到您的 jsp 文件的头部:

   < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >

像您所做的那样将编码过滤器添加到您的 web.xml 中。

这适用于我在 websphere 6.1 上部署的 webapp。 spring的版本是spring 3.0.6。

【讨论】:

    【解决方案2】:

    您确定您的记录器配置没有问题吗?检查如下:

    logger.info("updateEvent(): isCorrect=" + 
        event.getDescription().contains("\u20ac")); 
    

    【讨论】:

      【解决方案3】:

      尝试将以下内容添加到您的 jsp 文件的头部。

      <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
      

      在下面的question 中解决了这个问题。 在同一个问题中,我添加了一些与文本编码相关的其他问题的参考。

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多