gaf*_*fcz 8 jsf utf-8 character-encoding
我通常可以写捷克字符串到表单:

但是在验证之后(以及当我将收集的字符串发送到数据库时)字符串在其他一些字符集中:

h:outputTexts(jméno,příjmení)仍然正常显示,h:inputTexts不是.
我应该在哪里寻找问题?
更新: HTTP响应标头:

解:
request.setCharacterEncoding("UTF-8")in 创建过滤器Filter#doFilter() <f:view contentType="text/html" encoding="UTF-8"/>到主xhtml将这些行添加到hibernate.cfg.xml:
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
鉴于这些症状,UTF-8 数据将使用 ISO-8859-x 编码重新显示。\xc4\x8d(拉丁文小写字母 C 带 CARON (U+010D) )存在于 UTF-8 字节0xC4和中0x8D。根据ISO-8859-1 代码页布局,这些字节分别代表字符\xc3\x84和[无],这正是您所看到的。
这个特殊问题可能有很多原因。由于 Facelets 本身默认已经使用 UTF-8来处理 HTTP POST 请求参数并写入 HTTP 响应,因此在 Java/JSF 端应该/不可能需要修复/更改任何内容。
\n\n但是,当您在 JSF 创建/恢复视图之前手动获取请求参数(例如在自定义过滤器中)时,Facelets 设置正确的请求字符编码可能为时已晚。在继续链之前,您需要将以下行添加到自定义过滤器中,或者在导致问题的过滤器之前映射的新过滤器中:
\n\nrequest.setCharacterEncoding("UTF-8");\nRun Code Online (Sandbox Code Playgroud)\n\n<?xml version="1.0" charset="ISO-8859-1"?>此外,当您通过例如或显式/隐式更改 Facelets 的默认字符编码时,<f:view encoding="ISO-8859-1">Facelets 将改用 ISO-8859-1。您需要将其替换为UTF-8或完全删除它们。
如果不是这样,那么只有数据库方面才是主要嫌疑人。在那一侧我可以看到两个可能的原因:
\n\n具体如何解决取决于所使用的DB服务器。通常您需要在CREATE数据库表中指定字符集,但您通常也可以使用 来更改它ALTER。对于 JDBC 驱动程序,通常通过显式指定字符集作为连接 URL 参数来解决这个问题。例如,对于 MySQL:
request.setCharacterEncoding("UTF-8");\nRun Code Online (Sandbox Code Playgroud)\n\n| 归档时间: |
|
| 查看次数: |
8368 次 |
| 最近记录: |