【问题标题】:— special character decoding— 特殊字符解码
【发布时间】:2012-07-13 16:39:24
【问题描述】:

在我们的 Jersey REST 服务中,我们将 — 作为 JSON 对象中的一个元素发送回浏览器客户端。但是浏览器 JQuery 客户端正在使用我的服务,而不是将其解码为文字 -,而是将其显示为 —,即编码值本身。

想知道我是否必须在 Jersey 或 JSON 解析器中进行任何设置更改,以便客户端浏览器将其理解为文字 -。我正在以 UTF-16 格式从 Jersey 发送输出 JSON。感谢任何帮助。

【问题讨论】:

  • 我想知道你是否可以使用 &代替?
  • @SidCool,以及阅读他评论的人:这个问题的原始版本看起来像是 AKSM 试图发送一个 & 号。编辑现在清楚地表明他正在尝试发送一个破折号。
  • 对不起,如果我的问题具有误导性。我现在已经编辑了我的问题。
  • 准确确定通过网络发送的内容会很有用,因此您可以判断问题出在客户端还是服务器端。 Wireshark 是一个很好的方法。您还可以通过记录字节的简单代理路由流量 - 您可以使用 netcat 或用 Java 编写它。

标签: java jquery json rest jersey


【解决方案1】:

— 在 HTML 或 XML 中可能有效。但在 JSON 中是\u2014(2014 是十进制数 8212 的十六进制表示):

{
    "trip": "New York \u2014 Chicago"
}

您可以通过JSONLint查看。

顺便说一句:您究竟是如何生成 JSON 输出的?您不需要关心字符编码的细节。泽西岛应该为你做这件事。

更新: 显然,您的初始数据是 HTML 或 XML 编码的(无论出于何种原因)。因此解决方案是在将其作为 JSON 发送之前撤消编码。泽西岛将负责其余的工作。

如果您的数据仅针对某些字符进行了 HTML/XML 编码,而不是一般情况下,那么您遇到的问题需要在更接近源的位置进行修复。

【讨论】:

  • 我在 Resource 中使用 @Produces({MediaType.APPLICATION_JSON}) 基本上将我的 JAXB 对象转换为 JSON 对象。我在构建中使用 jersey-json.jar。问题是我回来了``—从另一个服务调用,我在出站 JAXB 中设置相同的值
  • 你的数据在 Java 对象中是什么样子的:是"New York — Chicago"(正确)还是"New York — Chicago"(错误)?
  • 在我传入的 Java 对象中,我得到了纽约 —芝加哥(错误)。我在一个 JAXB 对象中设置了相同的值,该对象又被转换为 JSON 以供客户端使用
  • 撤消编码,将其转换为文字 - 并发送?我将不得不清理大量此类不良数据,因为我在不同的地方获得了多个包含此类数据的列表
  • 可以使用obj.text = StringEscapeUtils.unescapeHTML(obj.text); 解码不良数据(使用 Apache Commons 并提供 HTML 编码)。或者从源头上解决问题。
【解决方案2】:

您发送的是&#8212 还是—?请记住,实体必须有一个终止分号。

【讨论】:

  • 它有一个终止分号。如果我在这里引入分号,它会在问题显示中被浏览器解码。所以我离开了终止;输出,但它存在于 JSON 输出中
  • 尝试用反引号引用字符串。这似乎对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2017-07-05
  • 2016-05-05
相关资源
最近更新 更多