JSF字符获得双UTF-8编码

时间:2010-01-07 10:25:53

标签: java jsf character-encoding

上周我问了一个问题,但JSF和charset编码

relevant SO question

现在我将这个JSF包含在我的JBoss Portal环境中。与常见的jboss portlet桥接器。当我提交表单时,会发生一些奇怪的事情:

门户网站是UTF-8,所以我的表单输入也是UTF-8但是在提交之后,字符再次被编码为UTF-8,这会导致类似这样的内容

äöü

如果再次提交响应页面,则会变为此

äöü

您可以点击提交按钮,看看每次都会对字符进行编码。

这是否按预期工作?

1 个答案:

答案 0 :(得分:5)

当使用UTF-8对使用ISO-8859-1初始解码的数据进行错误编码时,会发生这种情况。您可以通过以下方式轻松复制:

String input1 = new String("äöü");
System.out.println(input1); // äöü
String input2 = new String(input1.getBytes("UTF-8"), "ISO-8859-1");
System.out.println(input2); // äöü
String input3 = new String(input2.getBytes("UTF-8"), "ISO-8859-1");
System.out.println(input3); // äöü

(请注意,最后一个实际上包含更多字符,但是SO的消息解析器会吃掉它们。)

这意味着您的webapp ISO-8859-1中的某个位置被错误地用于代替UTF-8。用给定的信息很难确定根本原因。您可以尝试在JSF bean操作方法中sysout请求参数并读取stdout中的输出(您只需要确保stdout也使用UTF-8!如果您使用的是像Eclispe这样的IDE,那么可以在Workspace preferences中配置。如果这些字符看起来也是垃圾,那么请求编码是错误的。如果这些字符看起来很好,那么响应或webbrowser编码是错误的。要排除Web浏览器不被怀疑,您可以在例如Firefox确定 View >使用的编码字符编码