在 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】:设置<f:view>
的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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正确的字符编码在 jQueryMobile 1.3.1 中通过 AJAX 加载 ISO-8859-1 内容?
如何使用编码 ISO-8859-1 在 PHP 中编写文件? [复制]