2013-02-18 56 views
4

我遇到了內頁問題。它只是將頁面識別爲iso,但我想要utf-8,我將它聲明爲默認字符集。我在freemarker配置上嘗試了一些修改,但它們沒有效果。t上的Freemarker utf-8編碼問題。

彈簧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> 

輸出

enter image description here

回答

8

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

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

  • FreeMarker使用錯誤的字符集來解碼模板文件,因爲默認情況下它也使用平臺默認值。所以你應該設置default_encoding設置爲UTF-8。您也可以使用<#ftl encoding='UTF-8'>強制模板中的編碼。

+1

很棒的工作!現在沒事了。 – claudioivp 2013-02-20 14:05:12

1

怎麼樣,如果你添加此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"> 
+0

thx,但沒有效果。問題仍然存在... – claudioivp 2013-02-18 17:15:47

+0

這個 ...根據這個網站(http:// www.w3schools.com/tags/ref_charactersets.asp)Unicode字符集的前256個字符對應於ISO-8859-1的256個字符。這可能不是一個最佳的解決方案,但可能至少有某種解決方法 – 2013-02-18 17:24:06

+0

但問題只發生在<@t.page> ...內容... – claudioivp 2013-02-18 18:01:49

1

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

+4

只需在Eclipse中將默認編碼設置爲UTF-8即可。它使用平臺默認情況下,否則... – ddekany 2013-02-18 20:39:13

+0

請發佈此作爲答案。 ;) – claudioivp 2013-02-19 11:28:01

0

在某些情況下,您可能需要編碼實體。如果你是一個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