java - 字符编码不适用于 PrimeFaces CellEditor 组件

标签 java character-encoding jsf-2 primefaces mojibake

我在使用 <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 {
    }
}

但是没有效果。知道为什么 incell 编辑帖子使用不同的字符编码吗?

使用:

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

最佳答案

If i enter "åäö" and save the edit (using p:celleditor), the table in the database contains "åäö"

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

如果您在 CP1252 codepage layout 中查找这六个单独的字节,您会看到它们准确地代表了那些字符 åäö .

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

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

<f:view encoding="CP1252">

但是,我强烈不建议这样做。这样,您就可以从支持超过 100 万个字符的通用字符编码回退到支持不超过 255 个字符并且只能被 Windows 平台理解的专有字符编码。使用 Mac/Linux 或任何其他操作系统的网页访问者将无法正确解释该字符编码的 HTML 响应,也无法以该字符编码发回数据。您的网络应用程序还没有准备好成功统治世界。

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

另请参阅:

关于java - 字符编码不适用于 PrimeFaces CellEditor 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446714/

相关文章:

JSF1091 : No mime type could be found for file null

jsf - p :fileUpload does not set uploaded file in backing bean

java - 如何使用正则表达式提取此模式的子字符串

python - 如何修复 Python 中损坏的 utf-8 编码?

java - 从关键文本中获取 KeyChar

html - 在 HTML 文档中使用字符引用的最佳做法是什么?

php - UTF8 mysql 数据在单个 MySQL 字段中出现不正确

jsf-2 - 带有 filterFunction 的 Primefaces 数据表日期范围过滤器

java - 使用现有字段命名新对象 - Java

java - 以不同顺序调用接口(interface)方法