簡體   English   中英

t.page上的Freemarker UTF-8編碼問題

[英]Freemarker utf-8 encoding problems on t.page

我的內頁有問題。 它只是將頁面識別為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>

輸出

在此處輸入圖片說明

由於在插入的變量中所有的重音都正確,但是沒有直接輸入到模板中的重音,瀏覽器似乎知道該頁面使用UTF-8(您可以在瀏覽器的頁面信息對話框中查看) ,或者:

  • 模板文件的編碼錯誤。 在Eclipse中,您應該轉到Window-> Preferences-> Workspace,並將文本文件編碼設置為UTF-8。 這是一個全局設置,但是默認情況下Eclipse使用平台默認值,這在99%的項目中沒有意義。 您也可以在項目級別的項目->屬性->資源下進行設置。

  • FreeMarker使用錯誤的字符集來解碼模板文件,因為默認情況下它也使用平台默認值。 因此,您應該將default_encoding設置設置為UTF-8 您還可以使用<#ftl encoding='UTF-8'>強制在模板中進行<#ftl encoding='UTF-8'>

如果添加此charset =“ UTF-8”怎么辦

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

在HTML 5中,您應該添加:

<meta charset="UTF-8">

在以前的HTML中(請注意,您的代碼中的字母是小寫。。也許是對此有所幫助)

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

我找到了解決方案。 我需要使用Dreamweaver再次創建login.html文件,然后另存為html並將文件粘貼到eclipse項目中。

在某些情況下,您可能想對實體進行編碼。 如果您使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM