繁体   English   中英

JSF字符获得双UTF-8编码

[英]JSF chars get double UTF-8 encoded

上周我问了一个问题,但JSF和字符集编码

相关的SO问题

现在,我将此JSF包含在我的JBoss Portal环境中。 与常见的jboss portlet桥。 当我提交表格时,发生了一些奇怪的事情:

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

äöü

如果响应页面再次提交,它将变成这个

äöü

您可以单击“提交”按钮,然后再次看到字符被编码。

这按预期工作吗?

当最初使用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的消息解析器将它们删除了)。

这意味着您的Web应用程序中的某个地方未正确使用ISO-8859-1而不是UTF-8 很难用现有的信息来查明根本原因。 您可以尝试在JSF bean操作方法中对请求参数进行sysout,并在stdout中读取输出(您只需确保stdout也使用UTF-8 !如果您使用的是类似Eclispe的IDE,则可以配置工作空间首选项 )。 如果这些字符看起来也很垃圾,那么请求编码是错误的。 如果这些字符看起来不错,那么响应或Web浏览器编码是错误的。 为了排除怀疑的网络浏览器,您可以在Firefox中确定“ 视图” >“ 字符编码”所使用的编码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM