当前位置: 首页 > 知识库问答 >
问题:

解析JSON时无法识别的字符

施利
2023-03-14

我有一个这样的字符串,当我试图解析它时,它出现在JSON < code > processing data call \ \ u 007 fabc computers 中,jackson抛出一个这样的异常:

org.codehaus.jackson.JsonParseException: Unrecognized character escape 'U' (code 85)
 at [Source: java.io.StringReader@1b43c429; line: 1, column: 361]
        at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1292)
        at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
        at org.codehaus.jackson.impl.JsonParserMinimalBase._handleUnrecognizedCharacterEscape(JsonParserMinimalBase.java:360)
        at org.codehaus.jackson.impl.ReaderBasedParser._decodeEscaped(ReaderBasedParser.java:1064)
        at org.codehaus.jackson.impl.ReaderBasedParser._finishString2(ReaderBasedParser.java:785)
        at org.codehaus.jackson.impl.ReaderBasedParser._finishString(ReaderBasedParser.java:762)

我认为问题的发生是因为\\U007f。它在UTF-8中绝对有意义。知道如何避免这个问题吗?执行JsonParser.Feature。ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER在这里有什么帮助吗?

共有2个答案

贡可人
2023-03-14

Unicode字符< code>U 007F DELETE大概就是你面对的。

这个答案表明它不应该被编码。

然而,为了避免这种情况,你可以参考这个关于如何去除它们的答案。

缪宪
2023-03-14

您的JSON数据格式不正确。

JSON使用< code>\u转义序列对UTF-16代码单元进行编码。

在这种情况下,您的JSON数据试图对Unicode code point < code > U 007 f DELETE (这是一个ASCII控制字符,JSON规范并不要求对其进行转义,但允许对其进行转义)进行转义,但是使用了< code>\U转义序列来完成此操作。JSON规范明确声明必须使用< code>\u:

字符串是用引号 (U 0022) 括起来的 Unicode 代码点序列。除必须转义的字符外,所有字符都可以放在引号内:引号 (U 0022)、反向实心 (U 005C) 和控制字符 U 0000 到 U 001F。某些字符有双字符转义序列表示形式。

...

任何码位都可以表示为十六进制数。此数字的含义由 ISO/IEC 10646 确定。如果代码点位于基本多语言平面(U 0000 到 U FFFF)中,则它可以表示为六个字符的序列:一个反向实心形,后跟小写字母 u,后跟四个编码代码点的十六进制数字。

...

要转义不在基本多html" target="_blank">语言平面中的代码点,字符表示为12个字符的序列,对UTF-16代理对进行编码。

尽管在最后一段中没有明确说明,但 UTF-16 代理项对的 12 个字符序列由两个六个字符序列组成,这些序列必须遵循与 BMP 中的字符相同的转义格式。这是由字符编码图强制执行的:

定义 \U 转义序列。这就是解析器错误消息所抱怨的:

无法识别的字符转义“U”

 类似资料:
  • 我正在用Java/Spring创建简单的rest客户端。我的请求已被远程服务正确使用,我得到了以下响应字符串: 下面的代码是对象,我想从Json响应绑定值 我一直在获得“无法识别的字段访问\u令牌”,但当我添加

  • 我试图将一个JSON发送给一个REST控制器,它是用Spring编写的,不管我做了什么尝试,Jackson抛出了一个异常: 这是JSON: 有什么建议吗?

  • 问题内容: 我遇到反序列化问题: 这是我的课: 我要反序列化的JSON是: 我得到这个异常: 我不想添加: 因为我想得到ResObj … 如果我添加了注释,它将通过,但会将其设置为null ..这是我不想要的。 问题答案: 如果您不想在bean中使用设置器,而只使用字段和获取器,则可以使用ObjectMapper的可见性检查器来允许字段可见。像下面这样

  • 问题内容: 当我在Kibana中看到结果时,我发现JSON中没有字段,而且,该字段仅包含。 是否可以解析json中的字段并将其显示在Kibana中?我有以下配置: 以及以下JSON文件: 问题答案: 是。您需要在配置中添加一个过滤器,如下所示。 在这里的文档中对此进行了很好的描述 编辑 json编解码器似乎不喜欢传入数组。单个元素与此配置一起工作: 输入: Logstash结果: } 现在有了一个

  • 我试图张贴消息(包含英文和中文)到一个服务器。如果我使用Java应用程序来张贴消息,它工作得很好。 虽然我在Android中使用HttpPost,但服务器会收到无法识别的字符,例如 "æ¸åå¤§å ¦". 我尝试使用HttpURLConnection发布消息,结果也包含无法识别的字符。Java应用程序中的HttpClient和Android应用程序中的HttpClient有什么区别?非常奇怪。

  • 问题内容: 好的,现在我可以解析空间了,这是我以前的问题。现在我的解析器几乎可以使用了,但是有一个我无法弄清的缺陷。 我能够在段(参见代码)和管道之间的数据之后检索数据。我无法到达的是一个级别并检索包含在管道之间并以^分隔的数据。 例如。 但是,我当前的输出将是 我收到@后面带有各种ID的异常1 [Ljava.lang.String; @ 1786e64 下面给出的注释代码造成了问题。 码: 请指