【发布时间】:2012-01-26 10:56:17
【问题描述】:
我在我的 Web 应用程序(JSF 1.2、Spring 和 Tomcat 7)中遇到字符集编码问题,并且我已经想不出要测试什么来查看哪里出错了。
每当我提交类似 'çã' 的内容时,我都会得到 'çã':这意味着我以 UTF-8 发布的数据在 JSF 生活的某个地方被转换为 ISO-8859-1循环。
我知道错误的转换是 UTF-8 到 ISO-8859-1,因为它是相同的输出:
System.out.println(new String("çã".getBytes("UTF-8"), "ISO-8859-1"));
我认为错误的转换是在 JSF 生命周期中的某个地方(可能是之前?),因为我在我的 MB 中设置了一个验证器:
public void debugValidator(FacesContext context, UIComponent component,
Object object) throws ValidationException {
System.out.println("debug validator:");
System.out.println(object);
System.out.println("\n");
throw new ValidationException("DEBUG: " + object.toString());
}
它的消息返回为:“DEBUG:çã”
- 我在所有 .xhtml 页面中的第一行都是
<?xml version="1.0" encoding="UTF-8"?>。 - 我正在使用 Facelets,根据BalusC's article,它默认使用 UTF-8
- 所以它不需要,但我还是设置了 Spring 的
CharacterEncodingFilter在我的 web.xml 中将请求字符编码设置为 UTF-8。 - 我把
URIEncoding="UTF-8"放在Tomcat的server.xml文件中,只是为了保证 - 不是我浏览器的错,在控制台打印一样的东西,我的环境都是UTF-8。
您知道我还可以测试什么吗?我的错误假设可能是什么?
提前致谢!
【问题讨论】:
标签: jsf utf-8 character-encoding facelets tomcat7