目前我正在尝试开始使用 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 (http://www.springsource.com/developer/sts) 的 Springsource Tool Suite。 希望这有助于找出我的设置有什么问题。
编辑 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/5928046/