【发布时间】:2011-08-21 03:30:42
【问题描述】:
目前我正在尝试开始使用 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",并且 JSP 页面上的编码问题已经消失。
这是否意味着我的 .java 文件使用错误的字符集进行编码?在 Eclipse 中哪里可以更改?
谢谢。
【问题讨论】:
-
Springsource 工具套件,基本上是带有一些插件的 Eclipse 吗?您究竟是如何设置默认编码的?
-
是的,它只是带有一些用于 Spring 开发的预安装插件的 Eclipse (springsource.com/developer/sts)。我将 Springsource 首选项中的编码(与 Eclipse 中的相同)General > Workspace 和 General > Content Types 更改为 UTF-8
-
好吧,McDowell 在我删除的答案(基本上回答了您已经完成的内容)中提到,这可能是由于 Java 编译器使用错误的编码读取源文件造成的。这是一个非常合理的原因。但由于我不使用/拥有 Mac,我不知道如何修复它。
-
@OemerA - 您可以通过将
"ölm"替换为"\u00f6lm"来缩小问题范围。如果这可行,您就知道问题出在 Java 源文件及其编译为字节码。 -
@OemerA - 我从来没有安装过 STS,所以我不能说太多。鉴于
ö是UTF-8 中的字节序列C3 B6,我会说编辑器正在做正确的事情(您可以使用外部十六进制编辑器进行确认)。因此,读取文件并将其传递给编译器的任何内容都是使用错误的编码读取它 - 查看项目构建器(通过右键单击项目)并可能访问他们各自的错误数据库。
标签: java spring-mvc utf-8 character-encoding