JSF-primefaces中的法语字符应用程序显示了Mojibake

时间:2013-12-19 14:11:24

标签: jsf-2 primefaces

在我的应用程序中,我使用两种语言。英语和法语。 在英语中,它可以。但在阅读法语语言的属性文件时,它最终显示出mojibake。 我在我的属性文件中有这样的: example.french.char=é

但它在应用程序中没有正确显示。我在Windows中查看我的应用程序。我不想用Unicode字符替换法语字符。我希望它们通常出现在属性文件中。

我怎样才能让它发挥作用? 请建议。我可以在不使用Unicodes的情况下查看法语字符吗?

我的属性文件以UTF-8编码。 请指教!

我也试过以下......

public class CharacterEncodingFilter implements Filter{

private FilterConfig config;
@Override
public void destroy() {
    setConfig(null);
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain filter) throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");

    filter.doFilter(request, response);
}

@Override
public void init(FilterConfig config) throws ServletException {
    setConfig(config);
}

public FilterConfig getConfig() {
    return config;
}

public void setConfig(FilterConfig config) {
    this.config = config;
}
}

并在web.xml中添加了

<filter>
    <filter-name>charEncoding_Filter</filter-name>
    <filter-class>com.edfx.tum.filter.CharacterEncodingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>charEncoding_Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

但它仍然显示出mojibake。

2 个答案:

答案 0 :(得分:0)

您是否尝试使用servlet过滤器类将请求/响应编码类型设置为UTF-8。 这是一个例子:

import java.io.IOException;
import java.io.Serializable;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class SetCharacterEncodingFilter implements Filter, Serializable {

private static final long serialVersionUID = -4518853484989127891L;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
}

@Override
public void destroy() {

}

@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

然后在web.xml中注册过滤器

<filter>
    <filter-name>UTF8Charset</filter-name>
<filter-class>your.package.name.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UTF8CharSet</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>

答案 1 :(得分:0)

如果您的属性文件是UTF-8,则可能存在问题,因为它应该在加载(InputStream)中的ISO-8859-1中。您必须使用load(Reader)加载属性,在构造阅读器时指定编码。