【问题标题】:JSF chars get double UTF-8 encodedJSF 字符得到双 UTF-8 编码
【发布时间】:2010-01-07 10:25:53
【问题描述】:

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

relevant SO question

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

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

äöü

如果再次提交响应页面会变成这个

äöü

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

这是否按预期工作?

【问题讨论】:

  • 其他问题的答案对您有用吗?哪一个?
  • 至于这个问题 - 我认为您应该阅读有关 portlet 桥如何处理编码的文档
  • 关于文档——更具体地说——源代码,桥继承了门户的编码。这是 UTF-8。

标签: java jsf character-encoding


【解决方案1】:

当最初使用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,您可以配置Workspace preferences)。如果这些字符看起来也很垃圾,那么就是请求编码错误。如果这些字符看起来不错,那么是响应或网络浏览器编码错误。要排除网络浏览器的嫌疑,您可以在例如Firefox 确定 View > Character Encoding 使用的编码。

【讨论】:

  • 我已将日志记录更改为调试并启用我的 jboss 来记录每个请求。我提交后似乎字符已损坏,日志仅将 unicode 字符显示为????。我正在使用 JBoss 4.2.3 Server atm。
  • 记录器需要配置为使用UTF-8。然而,这本身并不是这个特定问题的根本原因。重读这篇文章以了解关于字符编码的小知识。
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2014-06-09
  • 2017-07-27
  • 2011-06-17
  • 2018-07-02
相关资源
最近更新 更多