2

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

我曾经encoding='windows-1252'能够使用瑞典语字符 (å, ä, ö)。创建实体可以正常工作,但是当我在<p:dataTable>使用中对其进行编辑时,<p:cellEditor>它会提交意外的字符。(如果我输入"åäö"并保存编辑(使用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 {
    }
}

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

使用:

  • NetBeans 7.0.1
  • 玻璃鱼 3.1
  • Primefaces 3.0.M4
4

1 回答 1

9

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

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

如果您在CP1252 代码页布局中查找这六个单独的字节,您会发现它们完全代表了这些字符åäö

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

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

<f:view encoding="CP1252">

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

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

也可以看看:

于 2011-12-10T04:30:06.150 回答