java - Spring MVC UTF-8 编码

标签 java spring-mvc utf-8 character-encoding

目前我正在尝试开始使用 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

请注意以下代码 <c:out value="ö" />显示没有编码错误。 我还在 Springsource Tool Suite 中将默认编码设置为 UTF-8,但仍然收到错误的字符。

编辑:

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

编辑2:

感谢 McDwell,我刚刚尝试使用 "\u00f6lm"而不是"ölm"在我的 Controller 中,JSP 页面上的编码问题消失了。

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

谢谢。

最佳答案

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

<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,您可能没有在 server.xml 中设置 URIEncoding。如果不将其设置为 UTF-8,它将无法工作。一定要保留 CharacterEncodingFilter。尽管如此,这里有一个简洁的checklist跟随。它肯定会指导您完成这项工作。

关于java - Spring MVC UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61207771/

相关文章:

java - 在 Spring MVC 中重定向期间传递模型属性并避免在 URL 中传递模型属性

java - 如何使用hadoop api在vm上运行的hadoop机器上创建目录

java - 使用 HandlerExceptionResolver 处理 404

java - 使用 Mapreduce for Java Appengine 计算唯一用户数

java - Spring boot - 返回 403 Forbidden 而不是重定向到登录页面

python - 如何在 Bottle 框架中渲染阿拉伯字符串?

c - C中的Unicode字符

java - 从 Java 中的 String 中删除长 unicode 术语

java - Ant scp 任务不起作用,即使在 ant/lib 上使用 jsch

java - 为什么我不能一次初始化多个数组?