相关疑难解决方法(0)

Spring MVC UTF-8编码

目前我正在尝试使用Spring MVC.在尝试时,我遇到了编码问题.

我想在JSP-Pages上显示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");
    }

}
Run Code Online (Sandbox Code Playgroud)

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

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

结果我得到以下:

Hello world!

ö

??lm
Run Code Online (Sandbox Code Playgroud)

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

编辑:

也许我应该提到我使用的是Mac …

java spring-mvc utf-8 character-encoding

60
推荐指数
7
解决办法
15万
查看次数

如何正确解码传递给servlet的unicode参数

假设我有:

<a href="http://www.yahoo.com/" target="_yahoo" 
    title="Yahoo!&#8482;" onclick="return gateway(this);">Yahoo!</a>
<script type="text/javascript">
function gateway(lnk) {
    window.open(SERVLET +
        '?external_link=' + encodeURIComponent(lnk.href) +
        '&external_target=' + encodeURIComponent(lnk.target) +
        '&external_title=' + encodeURIComponent(lnk.title));
    return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)

我已经确认external_title将编码Yahoo!%E2%84%A2并传递给SERVLET.如果SERVLET我在做:

Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)

我在浏览器中获得了Yahoo!¢.如果我手动将浏览器字符编码切换为UTF-8,它将更改为Yahoo! TM(这就是我想要的).

所以我认为我发送到浏览器的编码是错误的(确实如此Content-type: text/html; charset=ISO-8859-1).我改为SERVLET:

response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)

现在浏览器字符编码是UTF-8,但它输出Yahoo!但我无法让浏览器呈现正确的字符.

我的问题是:是否存在某些组合Content-type和/或new String(request.getParameter("external_title").getBytes(), "UTF-8");和/或其他会导致Yahoo! TM出现在SERVLET输出中?

java unicode servlets

36
推荐指数
3
解决办法
9万
查看次数

标签 统计

java ×2

character-encoding ×1

servlets ×1

spring-mvc ×1

unicode ×1

utf-8 ×1