【问题标题】:Facelets charset problemFacelets 字符集问题
【发布时间】:2023-03-31 00:53:02
【问题描述】:

在我的earlier post 中,JSF 字符集处理存在问题,但问题的另一部分是用于将数据插入数据库的 MySQL 连接参数。问题解决了。

但是,我将相同的应用程序从 JSP 迁移到 facelets,同样的问题再次发生。插入数据库时​​,输入字段中的字符会被替换(č 替换为 Ä),但从具有正确字符集的 sql 脚本插入到 db 的数据会正确显示。我仍在使用已注册的过滤器,并且页面模板与 head 元标记一起使用,如下所示:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">

如果我在 h:form 标签中插入以下属性:

acceptcharset="iso-8859-2"

我在 Firefox 中得到正确的字符,但在 IE7 中没有。

我还应该做些什么来让它工作吗?

提前致谢。

【问题讨论】:

    标签: unicode jsf facelets character-encoding


    【解决方案1】:

    将以下行添加到过滤器:

    response.setContentType("text/html;charset=ISO-8859-2");
    

    不要使用acceptcharset 属性。 IE 有严重的错误。

    此外,当您在 Facelets XHTML 页面顶部使用 &lt;?xml?&gt; 声明时,请确保它使用所需的字符集或仅删除整个声明,这不是严格要求的。

    <?xml version="1.0" encoding="ISO-8859-2"?>
    

    【讨论】:

    • 感谢您的回复。不幸的是,它并没有解决我的问题。显示正确的字符没有任何问题。它们被正确读取,但我无法按我应该的方式将它们写入 db(这不是 db 问题,因为我可以通过脚本或使用 acceptcharset attbitute 设置正确地写入它们)。
    • 检查客户端的响应头,例如萤火虫。
    • 我收到以下响应标头:服务器:Apache-Coyote/1.1 内容类型:文本/html;charset=UTF-8 传输编码:分块日期:2010 年 6 月 9 日星期三 12:39 :37 GMT 200 OK 所以,charset 不是我设置的,但我不知道为什么。
    • 所以它毕竟被UTF-8 覆盖了。您是如何声明 Facelets XHTML 页面的?与&lt;?xml encoding="UTF-8" ?&gt;?更改或删除此行。
    • 我从一开始就把它省略了。
    【解决方案2】:

    我想你可以看到org.springframework.web.filter.CharacterEncodingFilter的实现 你可以通过添加 -Dfile.encoding=ISO-8859-2 作为 jvm 参数来启动你的 tomcat

    【讨论】:

    • 他已经在做与此过滤器相同的操作,-Dfile.encoding 对客户端(网络浏览器)用于编码 POST 数据的字符集没有任何影响。@987654324 @ header 可以,但是 something (Facelets?) 隐式将其设置为 UTF-8。
    • 感谢您的回复。是的,在我搬到 Facelets 之前,我确实有适合我的过滤器。我想它与 Facelets 有关系,尤其是我将网页从 JSP 修改为 Facelets,这就是问题开始的时候。此外,如果我从 faces-config.xml 中删除行:com.sun.facelets.FaceletViewHandler,响应标​​头包含 Content-Type: application/xhtml+xml;charset=ISO-8859 -2
    • 我看到了这个帖子:forums.sun.com/thread.jspa?threadID=5421551 我不知道这是否是我问题的答案。希望不会。
    猜你喜欢
    • 2010-10-01
    • 2023-04-03
    • 2011-04-20
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多