freemarker的UTF-8上t.page编码问题(Freemarker utf-8 encod

2019-08-17 00:50发布

我在里面会有些问题。 它仅仅是确认页面作为ISO,但我想UTF-8,我声明了它作为默认的字符集。 我试着freemarker的配置进行一些修改,但他们都没有效果。

为spring-servlet.xml

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/pages/"/>
</bean>

template.html

<#macro page>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cemitério - Prefeitura Municipal de Maringá</title>
</head>

<body>
Usuários
<#nested/>
</body>
</html>
</#macro>

的login.html

<#import "templates/template.html" as t/>

<@t.page>

<#if erroLogin??>
    ${erroLogin}
</#if>
<form action="entrar" method="post">
    <div>
        <label>Usuário:</label>
        <input type="text" name="usuario" />
        <br />
        <label>Senha:</label>
        <input type="text" name="senha" />
        <br />
        <input type="submit" name="submit" />
    </div>
</form>

</@t.page>

产量

Answer 1:

由于口音是在插入变量的所有权利,但直接进入到模板的口音不是,浏览器似乎知道该页面使用UTF-8(你可以在浏览器的网页信息对话框中选中) ,或者:

  • 该模板文件被保存与错误的编码。 在Eclipse中,你应该去窗口 - >首选项 - >工作区,并设置文本文件编码成UTF-8。 这是一个全局设置,但默认情况下使用的Eclipse平台默认的,这是没有意义的项目的99%。 >属性 - - >资源也可以在项目设置这个项目的水平。

  • FreeMarker的使用了错误的字符集的模板文件进行解码,因为它也默认使用平台默认的。 所以,你应该设置default_encoding设置为UTF-8 你也可以强制在模板中的编码与<#ftl encoding='UTF-8'>



Answer 2:

怎么样,如果你添加此charset =“UTF-8”

<label charset="UTF-8" >Usuário:</label>

在HTML 5,你可以这样:

<meta charset="UTF-8">

在以前的HTML(注意你在你的code..maybe可能是导致其小写)

<meta http-equiv="Content-type" content="text/html;charset=UTF-8">


Answer 3:

我找到了解决办法。 我需要重新创建login.html的文件,使用Dreamweaver,然后另存为HTML并粘贴到Eclipse项目中的文件。



Answer 4:

在某些情况下,你可能想对实体编码。 如果你是一个Java对象的数据(上下文)为模板的工作,你可能有一个方法添加到实体编码:

public String htmlEntities(String input)
{
    StringBuilder sb = new StringBuilder(input.length());
    for (char c : input.toCharArray()) {
        if (c == '"') {
            sb.append("&quot;");
        }
        else if (c == '<') {
            sb.append("&lt;");
        }
        else if (c == '>') {
            sb.append("&gt;");
        }
        else if (c < 128) {
            sb.append(c);
        }
        else {
            sb.append(String.format("&#x%04x;", (int) c));
        }
    }
    return sb.toString();
}

你可以在你的模板等一起使用:

${htmlEntities('Usuário')}

其结果将是:

Usu&#x00e1;rio


文章来源: Freemarker utf-8 encoding problems on t.page