【发布时间】:2011-05-02 11:07:18
【问题描述】:
我正在开发一个使用 JSF 2.0 (Mojarra 2.0.3) 前端开发并部署在 Glassfish v.3.0.1 服务器上的项目。应用程序必须接受 ISO-8859-2 字符集并将数据写入 MySql 数据库。 问题是数据不在正确的字符集中。 请求Http头有属性值:
content-type: application/x-www-form-urlencoded; charset=UTF-8
问题不在于响应,因为从数据库读取数据时可以正确显示数据。此外,MySql 连接 URL 应该是正确的,因为它是为 latin2 集合设置的。我什至尝试创建custom filter,但没有任何结果。
有什么想法可以接受正确的字符集吗?
提前致谢。
【问题讨论】:
-
如果您使用的是 JSF 2.0,我猜您使用的是 Facelets。然后,您是否在 Facelet (XHTML) 页面的顶部有这个
<?xml version="1.0" encoding="UTF-8" ?>。只需将 UTF-8 更改为 ISO-8859-2。另外,检查您是否定义了类似<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>的元标记。也将其编码更改为 ISO-8859-2。最后,检查您的 MySQL 表的DEFAULT CHARSET=ISO-8859-2定义。如果不是 ISO-8859-2,则使用ALTER TABLESQL 命令进行更改。应该是这样的。 -:) -
@user463053 感谢您的回复。不幸的是,我放弃了尝试将编码设置为 ISO-8859-2 并切换到 UTF-8 编码。是的,我正在使用 Facelets,我的页面有
<?xml version="1.0" encoding="ISO-8859-2">标签。 MySql 默认字符集设置为 latin2,connectionURL 包含useUnicode=true&amp;characterEncoding=ISO8859_2&amp;characterSetResults=latin2。但是,我会再试一次。 -
如果您将所有内容设置为 ISO-8859-2 后仍然无法正常工作,您可以随时编写过滤器(请参阅我的回答)来强制 ISO-8859-2 编码。但是,将其更改为 UTF-8 应该对您有用,因为可以在 UTF-8 中找到 ISO-8859-2 字符集 - 并且成为 UTF-8 意味着您将来可以为其他语言添加其他字符集而不会大惊小怪. :)
标签: character-encoding httpwebrequest jsf-2 content-type glassfish-3