簡體   English   中英

解析JSON時無法識別的字符

[英]Unrecognized character while parsing JSON

我有一個像這樣的字符串,當我嘗試解析它時,它會在JSON processing data call\\\\U007fabc computers傳入:傑克遜引發了這樣的異常:

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在這里有幫助嗎?

您的JSON數據格式錯誤。

JSON使用\\u\u003c/code>轉義序列編碼UTF-16代碼單元。

在這種情況下,您的JSON數據是試圖逃跑的Unicode碼點U+007F DELETE (這是不需要由一個ASCII控制字符JSON規范進行轉義,但允許被轉義),但使用\\U進行轉義序列。 JSON規范明確指出必須使用\\u\u003c/code> :

字符串是用引號(U + 0022)包裹的Unicode代碼點的序列。 除必須轉義的字符外,所有字符都可以放在引號內:引號(U + 0022),反斜線(U + 005C)和控制字符U + 0000至U + 001F 有些字符有兩個字符的轉義序列表示。

...

任何代碼點都可以表示為十六進制數 此數字的含義由ISO / IEC 10646確定。如果代碼點位於基本多語言平面(U + 0000至U + FFFF)中,則可以將其表示為六個字符的序列:反向固線, 后跟小寫字母u ,后跟編碼代碼點的四個十六進制數字。

...

為了逃避不在基本多語言平面中的代碼點,該字符表示為十二個字符的序列,對UTF-16代理對進行編碼。

盡管在上一段中沒有明確說明,但UTF-16代理對的12個字符序列由兩個6個字符序列組成,這些序列必須遵循與BMP中字符相同的轉義格式。 這是由字符編碼圖強制執行的:

圖
(來源: json.org

沒有定義\\U轉義序列。 這就是解析器錯誤消息所抱怨的:

無法識別的字符轉義符'U'

您可能正在面對Unicode字符U+007F DELETE

這個答案表明它不應該被編碼。

但是,為了規避,您可以參考此答案以了解如何去除它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM