4

我在这个主题上通过了许多“谷歌”,但没有任何帮助。问题是,我在每个可以拥有(甚至不能拥有)的地方都设置了 UTF-8 编码,但是从 inputText 检索的数据仍然损坏。我使用 JSF、Primefaces 和 Hibernate。当我发布到页面时,它会从 DB 正确呈现,在 html doc 中写为纯文本,甚至是 bean 答案。

<h:outputText value="text cez OT: čerstvejší"/><br/>
text cez IDE: čerstvejší<br/><br/>

<h:outputText value="text cez OT_beans: #{temp.dia}"/><br/>
text cez IDE_beans: #{temp.dia}<br/><br/>

<h:outputText value="text cez OT_DBS: #{temp.getDBS()}"/><br/>
text cez IDE_DBS: #{temp.getDBS()}<br/>

另外,当我将变量的设置器设置为此:

public String getName() {
    return "načítané z aplikácie";
}

它正确呈现。只有当我从页面发布任何“ľščťžýáíé”字符时,它才会损坏为Ä?和常见的字符。它在 NetBeans 管理的 Appache Tomcat 7.0.34 上运行,带有 CDI、JSF 2.2、Primefaces 3.5、Hibernate 3.2.5。UTF-8 编码集的地方:

  1. meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 在每个标题中

  2. 连接器端口="8080" 协议="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 和连接器端口="8009" 协议="AJP/1.3" redirectPort="8443 " URIEncoding="UTF-8"/> 在 Appache 服务器上

  3. f:view encoding="UTF-8" contentType="text/html">

  4. 我也有 webFilter,但没有帮助:

    @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setCharacterEncoding(编码);链.doFilter(请求,响应);}

有什么帮助吗?其他问题?谢谢!`在此处输入代码

4

2 回答 2

2

问题是,Tomcat 7 上的 CDI 使用需要org.jboss.weld.environment.servlet.Listener使用不同的编码(我认为)。解决方案是在焊接监听器之前配置org.apache.catalina.filters.SetCharacterEncodingFilter和。org.jboss.weld.servlet.ConversationFilter

<filter>
    <filter-name>SetCharacterEncoding</filter-name>  
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>  
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>ignore</param-name>  
        <param-value>false</param-value>  
    </init-param>
</filter>
<filter>
    <filter-name>Conversation</filter-name>  
    <filter-class>org.jboss.weld.servlet.ConversationFilter</filter-class>        
</filter>
<filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>
<filter-mapping>
    <filter-name>Conversation</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>
于 2013-11-12T12:33:28.820 回答
0

也许您的数据库中的编码不是 UTF-8。您可以在数据库上执行 show create table 时进行检查。

于 2013-11-11T15:17:40.597 回答