0

我正在開發一個使用JSF 2.0(Mojarra 2.0.3)前端開發並部署在Glassfish v.3.0.1服務器上的項目。應用程序必須接受ISO-8859-2字符集並將數據寫入MySql數據庫。 問題是數據不在正確的字符集中。 請求的HTTP報頭具有屬性值:Glassfish JSF 2.0字符集問題

content-type: application/x-www-form-urlencoded; charset=UTF-8

的問題是不與反應,由於從數據庫中讀出時,數據可以被正確地顯示。此外,MySql連接URL應該是正確的,因爲它被設置爲latin2 collaction。我甚至嘗試創建custom filter,但沒有任何結果。

任何想法如何完成接受正確的字符集?

在此先感謝。

+0

我收集你使用Facelets,如果您使用的是JSF 2.0。那麼,你在Facelet(XHTML)頁面的頂部是否有這個<?xml version =「1.0」encoding =「UTF-8」?>'。只需將** UTF-8 **更改爲** ISO-8859-2 **即可。此外,請檢查是否已將META標記定義爲「'。將其編碼更改爲ISO-8859-2。最後,檢查你的MySQL表的「DEFAULT CHARSET = ISO-8859-2」定義。如果它不是ISO-8859-2,則使用「ALTER TABLE」SQL命令更改它。應該是這樣的。 - :) – ChuongPham 2011-04-11 14:32:51

+0

@ user463053謝謝您的回覆。不幸的是,我放棄了將編碼設置爲ISO-8859-2並切換到UTF-8編碼。是的,我使用的是Facelets,我的頁面有'<?xml version =「1.0」encoding =「ISO-8859-2」>'標籤。 MySql默認字符集設置爲latin2,connectionURL包含'useUnicode = true & characterEncoding = ISO8859_2 & characterSetResults = latin2'。但是,我會再試一次。 – Vladimir 2011-04-13 08:32:03

+0

如果將所有內容都設置爲ISO-8859-2並且仍然不起作用,則可以隨時寫一個Filter(請參閱我的答案)以強制執行ISO-8859-2編碼。但是,由於可以在UTF-8中找到ISO-8859-2字符集,因此將其更改爲UTF-8應該適用於您,而UTF-8意味着您可以在未來爲其他語言添加其他字符集,而不會大驚小怪。 :) – ChuongPham 2011-04-19 18:16:46

回答

0

您可以始終強制ISO-8859-2編碼通過創建一個篩選器並在您的web.xml中定義它。在最低限度,篩選應該有:

public class CustomFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     try { 
      if ((request instanceof HttpServletRequest) 
       && (response instanceof HttpServletResponse)) { 
       request.setCharacterEncoding("ISO-8859-2"); 
       response.setContentType("text/html; charset=ISO-8859-2") 
      } 
      chain.doFilter(request, response); 
     } catch (Exception e) { 
      // Do your logging here 
     } 
    } 
}