1

我们在 Spring webapp 中使用 JTwig 模板引擎。它是一个很棒的工具,并且具有非常好的功能,但是我们在使用 UTF-8 的 unicode 内容编码方面遇到了困难。

首先,ViewResolver在Java中配置有:

@Bean
public ViewResolver viewResolver() {
    JtwigViewResolver view = new JtwigViewResolver()
    view.setPrefix("/WEB-INF/templates/");
    view.setSuffix(".twig");
    return view;
}

然后我们让 Spring MVC 控制器向模型添加一些文本并将其传递给视图:

@RequestMapping(value = "/unicode", produces  = "text/html;charset=UTF-8")
public String testUnicode(ModelMap model) {
    model.addAttribute("text", "tête de bou  간편한 설치 및 사용");
    return "testPage";
}

最终渲染的地方:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
    <h1>tête de bouton -- 간편한 설치 및 사용</h1>
    From model: {{ text }}
</body>
</html>

但输出实际上是:

tête de bouton -- 간편한 설�? 및사용

来自模型: t?te de bou ??? ?? ? ??

模板中硬编码的 Unicode 文本几乎是正确的,但模型中的文本完全搞砸了。有任何想法吗?

4

2 回答 2

3

Jtwig 在渲染时使用 Java 的默认字符集。这违反了 Twig 兼容性,因为Twig 默认为 UTF-8

我为3.1.0 中发布的问题编写了一个补丁。

于 2014-10-27T20:57:02.587 回答
0

您可以执行以下操作:

1) view.setEncoding("UTF-8"); 2)view.setContentType("text/html; charset=UTF-8");

第二

于 2016-04-05T15:14:22.697 回答