在 Jboss 上使用 ISO-8859-1 编码和 JSF 2

Posted

技术标签:

【中文标题】在 Jboss 上使用 ISO-8859-1 编码和 JSF 2【英文标题】:Use ISO-8859-1 encoding with JSF 2 on Jboss 【发布时间】:2012-08-07 19:59:10 【问题描述】:

我有一个使用以下指令的 JSP 页面:

<%@page contentType="text/html; charset=iso-8859-1" pageEncoding="iso-8859-1"%>

因此,页面中的表单使用 ISO-8859-1 编码发送,bean 接收(在 setXXX() 方法中)根据此格式编码的字符串。

我想将 JSP “翻译”成 JSF 2,它默认使用 UTF-8。如何强制 JSF 使用 ISO-8859-1 并因此模拟页面指令?

我在 jboss 6 上使用 Mojarra + richfaces。

谢谢!

【问题讨论】:

【参考方案1】:

设置&lt;f:view&gt;encoding属性。

<f:view encoding="ISO-8859-1">

不过,现在不再建议坚持使用非 Unicode 编码。你的 web 应用程序还没有准备好统治世界,当最终用户尝试发送 Unicode 编码的数据(例如希伯来语、西里尔文、中文等)时,你会冒Mojibake 的风险。

【讨论】:

您好 BalusC,感谢您的回答! f:view(我试图将它直接放在 html 和 h:body 之后的模板中)似乎没有帮助:Firebug 一直显示 HTTP 的“Content-Type: text/html;charset=UTF-8”标题..我错过了什么吗?谢谢 显然它已被其他地方覆盖。在FaceletViewHandlingStrategy#createResponseWriter() 开始调试。我怀疑RenderKit 不尊重视图设置的编码。也许是 RichFaces 特定的? 我按照下面的描述解决了,老实说不明白问题出在哪里。正如你在这里所说的:***.com/questions/8609994/…,UTF-8 是默认的,使用 ISO-8859 没有意义- 1.尽管如此,我的豆子还是收到了 Mojibaked 德语字符。通过明确设置请求的字符编码,我解决了这个问题。奇怪,不是吗?【参考方案2】:

我并没有真正理解这个问题,但这让我在使用 UTF-8 而不是 ISO-8859-1 时避免了 Mojibake:

public class EncodingFilter implements Filter 

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException 
        if (req.getCharacterEncoding() == null) 
            req.setCharacterEncoding("UTF-8");
        
        chain.doFilter(req, resp);
    

    @Override
    public void destroy() 
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException 
    

奇怪的是,没有这个过滤器,我得到了 Mojibakes,尽管我没有指定任何类型的编码。我还注意到 init() 方法中的 (filterConfig.getInitParameter("encoding")) 总是返回 null。

【讨论】:

以上是关于在 Jboss 上使用 ISO-8859-1 编码和 JSF 2的主要内容,如果未能解决你的问题,请参考以下文章

java中为啥要用ISO-8859-1编码啊?

如何使用正确的字符编码在 jQueryMobile 1.3.1 中通过 AJAX 加载 ISO-8859-1 内容?

如何使用编码 ISO-8859-1 在 PHP 中编写文件? [复制]

在 Python 中使用 ISO 8859-1 编码字符

使用 NSString 将 UTF-8 编码转换为 ISO 8859-1 编码

Python ISO-8859-1 编码