[英]Can't change encoding of freemarker template to UTF-8 in spring framework
[英]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(""");
}
else if (c == '<') {
sb.append("<");
}
else if (c == '>') {
sb.append(">");
}
else if (c < 128) {
sb.append(c);
}
else {
sb.append(String.format("&#x%04x;", (int) c));
}
}
return sb.toString();
}
可以在您的模板中使用它,例如:
${htmlEntities('Usuário')}
結果將是:
Usuário
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.