2010-04-18 44 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条目看起来非常像记录的属性。我没有意识到这是两个问题的结合。