我在我的web应用程序(JSF 1.2,Spring和Tomcat 7)中遇到了charset编码问题,并且我已经用尽了测试的想法以查看它在哪里出错了。在JSF 1.2中使用错误编码的POST参数
每当我提出类似“钙”我得到“çã”:这意味着我的数据发布为UTF-8被转换为ISO-8859-1在JSF生命周期的某个地方。
我知道错了转换为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。
您对我还能测试什么有什么想法吗?什么可能是我的错误假设?
在此先感谢!
嗨,BalusC,感谢您的回答,但我认为这是周围的其他方法,使Content-type头设置为UTF-8。现在,我已经检查过,如果手动将浏览器中的编码更改为ISO-8859-1,则字符将显示在验证器消息中!这是什么意思? – elias 2011-12-23 10:07:43
关于Facelets,我正在使用1.1.15.B1顺便说一句。 – elias 2011-12-23 10:09:28
尽管_Content-type_设置为_text/html; charset = UTF-8_,浏览器是否可能将数据发送为ISO-8859-1? – elias 2011-12-23 12:55:24