目前,我正在尝试开始使用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,但仍然遇到错误的字符。
<c:out value="ö" />
编辑:
也许我应该提到我正在使用OS X 10.6的Mac。对于Spring开发,我使用Spring的Springsource工具套件(http://www.springsource.com/developer/sts)。希望这有助于找出我的设置出了什么问题。
编辑2:
多亏了McDwell,我才尝试在控制器中使用”\u00f6lm”而不是使用,”ölm”并且JSP页面上的编码问题也消失了。
这是否意味着我的.java文件使用错误的字符集编码?我在哪里可以在Eclipse中更改此设置?
谢谢。
好的,我发现了编码问题的原因。
问题出在我的构建过程中。我没有告诉pom.xml文件中的Maven 使用UTF-8编码来构建项目。因此,Maven刚从我的系统MacRoman中获取了默认编码,并使用MacRoman编码进行了构建。
幸运的是,Maven在构建项目时就向你发出警告(但是,由于所有其他消息,该警告很有可能很快从屏幕上消失)。
这是你需要在pom.xml文件中设置的属性:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ... </properties>
谢谢大家的帮助。没有你们,我将无法解决这个问题!
请务必注册Spring的CharacterEncodingFilter你web.xml(必须是该文件中的第一个过滤器)。
CharacterEncodingFilter
web.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你可能没有设置URIEncoding你的server.xml。如果你未将其设置为UTF-8,它将无法使用。绝对保持CharacterEncodingFilter。不过,这里有一个简洁的清单。它一定会指导你完成这项工作。
URIEncoding
server.xml