2010-04-18 23 views
1

我在我的jsf頁面上設置正確的字符集有問題。我使用帶有latin2(ISO-8859-2字符集)和latin2_croatian_ci排序規則的MySql db。但是,在支持託管bean屬性上設置值時遇到問題。在我的頁面頂部JSF ISO-8859-2字符集

Page指令是:

<%@ page language="java" pageEncoding="ISO-8859-2" contentType="text/html; charset=ISO-8859-2" %> 

在腦子裏,我包括:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2"> 

而且我的表單標籤是:

<h:form id="entityDetails" acceptcharset="ISO-8859-2"> 

我創建和使用以下doFilter方法實現在web.xml中註冊過濾器:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    request.setCharacterEncoding("ISO-8859-2"); 
    response.setCharacterEncoding("ISO-8859-2"); 
    chain.doFilter(request, response); 
} 

但是,即當我通過inputText設置託管bean屬性時,所有特殊(unicode)字符都將替換爲'?'字符。

我真的沒有任何其他想法如何設置字符集,以頁面執行良好。有什麼建議麼?

在此先感謝。

+1

*你是如何認定它們已被損壞的?你有沒有在視圖中查看它們?或者在標準輸出中? (你在'System.out.print'這些字符的地方)。 – BalusC 2010-04-18 14:38:43

+0

對不起,我的延遲迴復。 我通過SQL腳本插入一些數據到數據庫中,並且他們顯示正確,所以我得出結論,顯示正確的字符集沒有問題。我在從JSF發送的支持bean集合方法數據中記錄了(通過slf4j的stdout和文件),並且數據已損壞。另外,插入數據庫的數據已損壞。 – Vladimir 2010-04-20 15:36:44

回答

0

我做的記錄是誤導。原來,stdout用'?'替換了特殊字符字符。但是,寫入db的字符也被替換爲'?'標誌。問題的另一部分是JConnector沒有被設置爲正確的編碼,所以db條目看起來非常像記錄的屬性。我沒有意識到這是兩個問題的結合。