Java 带有非UTF-8字符的请求正文抛出JSON解析错误:无效的UTF-8起始字节0xae,0xfc
解析JSON请求主体时获取以下异常 请求正文有一个特殊字符“®”(非UTF-8),解析时失败。如何处理请求正文中的非UTF-8字符Java 带有非UTF-8字符的请求正文抛出JSON解析错误:无效的UTF-8起始字节0xae,0xfc,java,json,spring-boot,gradle,jackson,Java,Json,Spring Boot,Gradle,Jackson,解析JSON请求主体时获取以下异常 请求正文有一个特殊字符“®”(非UTF-8),解析时失败。如何处理请求正文中的非UTF-8字符 { "fields": [ { "fieldLabel": "data®" } ] } 我想用特殊字符保存对象。我试着研究,却找不到一个合适的解决办法。 提前谢谢 org.springframework.http.converter.
{
"fields": [
{
"fieldLabel": "data®"
}
]
}
我想用特殊字符保存对象。我试着研究,却找不到一个合适的解决办法。
提前谢谢
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid UTF-8 start byte 0xae; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0xae
at [Source: (PushbackInputStream); line: 1, column: 907] (through reference chain: java.util.ArrayList[0]->com.model.TableDefinition["field"]->java.util.ArrayList[1]->com.model.FieldDefinition["fieldLabel"])
将“charset=UTF-8”添加到标题中的内容类型解决了该问题:
headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString() + ";charset=UTF-8")
JSON必须用UTF8编码。你能修复发出请求的任何东西,使其发送正确的JSON吗?没有“非UTF-8字符”这样的东西。任何Unicode字符都可以用UTF-8编码。您的JSON显然是用与UTF-8不同的字符编码编码的——这很奇怪,也很不寻常,可能意味着在生成此JSON的任何系统中都存在错误。如果您无法修复另一个系统中的错误,那么您可以通过使用JSON所在的实际字符编码(而不是UTF-8)解析JSON来解决此问题。在ISO-8859-1编码(以及许多其他ISO-8859-xx编码)中,®编码为0xae。请求主体可能正在使用ISO-8859-1或类似标准。尽管JSON很少使用非Unicode编码,但检查请求的内容类型可能是有意义的。它应该表示编码为
application/json;charset=iso-8859-1
。我发现问题出在生成json的源系统中,我在标题中添加了以下编码内容,解决了问题“headers.set(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_json.toString()+”charset=UTF-8“;”这对您有帮助吗?