弹簧 MVC UTF-8 编码

2022-08-31 14:50:22

目前,我正在尝试开始使用Spring MVC。在尝试时,我遇到了一个编码问题。

我想在我的 JSP 页面上显示 UTF-8 字符,所以我在我的 ModelAndView 中添加了一个带有 UTF-8 字符的字符串。它看起来像这样:

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @RequestMapping(value="/", method=RequestMethod.GET)
    public ModelAndView home() {
        logger.info("Welcome home!");
        return new ModelAndView("home", "utftest", "ölm");
    }

}

在 JSP 页面上,我只想显示带有 UTF-8 字符的字符串,如下所示:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Home</title>
</head>
<body>
    <h1>Hello world!</h1>
    <p><c:out value="ö" /></p>
    <p><c:out value="${utftest}"></c:out></p>
</body>
</html>

结果,我得到以下:

Hello world!

ö

ölm

请注意,显示以下代码时未出现编码错误。我还在Springsource工具套件中将默认编码设置为UTF-8,但我仍然得到错误的字符。<c:out value="ö" />

编辑:

也许我应该提到我正在使用带有OS X 10.6的Mac。对于Spring开发,我使用Spring的Springsource工具套件(http://www.springsource.com/developer/sts)。希望这有助于找出我的设置出了什么问题。

编辑 2:

多亏了McDwell,我刚刚尝试使用而不是在我的控制器中使用,JSP页面上的编码问题消失了。"\u00f6lm""ölm"

这是否意味着我的.java文件是用错误的字符集编码的?在 Eclipse 中,我在哪里可以更改此设置?

谢谢。


答案 1

确保在文件中注册Spring's(必须是该文件中的第一个过滤器)。CharacterEncodingFilterweb.xml

<filter>  
    <filter-name>encodingFilter</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>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

如果您在Tomcat上,您可能没有在.如果不将其设置为 UTF-8,它将不起作用。一定要保留.尽管如此,这里有一个简明的清单。它肯定会指导您完成这项工作。URIEncodingserver.xmlCharacterEncodingFilter


答案 2

好的,伙计们,我找到了编码问题的原因。

错误出在我的构建过程中。我没有在我的文件中告诉Maven使用UTF-8编码构建项目。因此,Maven只是从我的系统MacRoman中获取默认编码,并使用MacRoman编码构建它。pom.xml

幸运的是,Maven在构建项目时会警告您这一点(但是由于所有其他消息,警告很有可能会从屏幕上消失以快速消失)。

以下是您需要在文件中设置的属性:pom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>

谢谢你们的帮助。没有你们,我就无法弄清楚这一点!


推荐