【问题标题】:Character encoding not working with PrimeFaces CellEditor component字符编码不适用于 PrimeFaces CellEditor 组件
【发布时间】:2012-01-16 19:37:29
【问题描述】:

我在使用 <p:rowEditor> 编辑表格时遇到了一些问题

我使用encoding='windows-1252' 是为了能够使用瑞典语字符 (å, ä, ö)。创建实体工作正常,但是当我使用<p:cellEditor><p:dataTable> 中编辑它时,它会提交意外的字符。 (如果我输入"åäö" 并保存编辑(使用p:celleditor),数据库中的表包含"åäö"

我的 xhtml 页面是这样开始的:

<?xml version='1.0' encoding='windows-1252' ?> 
<!DOCTYPE html>
<html...

我尝试过使用字符编码过滤器:

public class CharacterEncodingFilter implements Filter {

    private static String ENCODING = "windows-1252";

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(ENCODING);
        response.setCharacterEncoding(ENCODING);
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
    }
}

但无济于事。任何想法为什么 incell 使用不同的字符编码编辑帖子?

使用:

  • NetBeans 7.0.1
  • Glassfish 3.1
  • Primefaces 3.0.M4

【问题讨论】:

    标签: java character-encoding jsf-2 primefaces mojibake


    【解决方案1】:

    如果我输入“åäö”并保存编辑(使用 p:celleditor),数据库中的表包含“åäö”

    这是 UTF-8 编码字符的典型 CP1252 表示。在 UTF-8 中,这些字符由以下字节表示:

    如果您在CP1252 codepage layout 中查找这六个单独的字节,您会发现它们完全代表åäö 中的那些字符。

    在生成 HTML 响应和处理 POST 请求时,JSF/Facelets 默认使用 UTF-8 字符编码。 XML encoding 属性实际上并没有改变任何东西。它只是告诉 XML 解析器您写入/保存文件的字符编码,以便它可以使用正确的字符编码对其进行解析。

    更改HTML响应的字符编码和POST请求的处理是通过设置视图根标签&lt;f:view&gt;encoding属性来完成的:

    <f:view encoding="CP1252">
    

    但是,我强烈不推荐这个。这样,您就可以从支持超过一百万个字符的通用字符编码回退到支持不超过 255 个字符且仅由 Windows 平台理解的专有字符编码。使用 Mac/Linux 或任何其他操作系统的网页访问者将无法正确解释该字符编码中的 HTML 响应,也无法以该字符编码发送回数据。您的 Web 应用程序将无法成功统治世界。

    您需要以不同的方式解决此问题。显然您的数据库需要更改以支持 UTF-8。究竟如何做到这一点无法回答,因为您没有告诉任何有关数据库制作/版本的信息。但是更改数据库/表的字符编码应该是一些 SQL 命令的问题。或者,如果您正在试验,只需截断数据库并使用正确的字符集重新创建它。有关详细信息,请参阅特定于 DB 的 SQL 手册。

    另见:

    【讨论】:

    • 很好的答案,一如既往。谢谢。
    • 这个答案+1。 OP 应该改变他的 DB 编码,而不是把奇怪编码的负担放在他的用户身上。
    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 2015-02-13
    • 2012-06-11
    • 1970-01-01
    • 2017-01-17
    • 2015-06-04
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多