我有最简单的 JSF2 表单,可以在 MySQL 数据库中插入表字段。
我的 facelet 有 <?xml version="1.0" encoding="UTF-8"?>
在顶部。
我的输入类似于 <h:inputText value="#{testController.entity.test}" id="test" />
所以我尝试在我的 Jpa2/Hibernate 实体中插入“provà”。然后我坚持它,当我在我的 MySQL 数据库中查找保存的值时....
我找到“provÔ。这是同样的旧编码问题,我总是通过尝试和尝试来解决....
你能建议我先检查什么来修复它吗?
我的意思是,我知道这个问题缺乏信息,我只是想看看你问我什么:在你的问题中我会找到答案! :)
最佳答案
My facelet has
<?xml version="1.0" encoding="UTF-8"?>
at the top.
这与问题无关。这只会告诉 XML 解析器在将其解析为基于树的层次结构之前读取 XML 文件内容时使用哪个字符集。
您的具体问题可能有 2 个可能的原因:
HTTP 请求字符编码设置不正确。然而,这不是正常情况,因为默认情况下 JSF/Facelets 已经在所有层中使用 UTF-8。但是,只要在 JSF/Facelets 设置正确的字符编码之前其他东西访问了 HTTP 请求主体,就会出现此问题。众所周知,PrimeFaces 3.x 可以做到这一点。另见 Unicode input retrieved via PrimeFaces input components become corrupted .解决这个问题的方法之一是创建一个看起来像 UTF-8 form submit in JSF is corrupting data 的过滤器。 .
JDBC 连接字符编码设置不正确。 MySQL JDBC 驱动程序使用客户端平台默认字符编码而不是服务器表字符编码。确保您的 MySQL JDBC URL 如下所示:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
关于java - JSF2 Form 到 DB 特殊字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029462/