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 
     } 
    } 
}