【发布时间】:2020-07-20 11:09:34
【问题描述】:
解析 JSON 请求正文时出现以下异常,
请求正文有一个特殊字符“®”(非 UTF-8),解析时失败。如何处理请求正文中的非 UTF-8 字符?
{
"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"])
【问题讨论】:
-
JSON 必须以 UTF8 编码。您能否修复发出请求的任何内容,以便发送正确的 JSON?
-
不存在“非 UTF-8 字符”之类的东西。任何 Unicode 字符都可以用 UTF-8 编码。您的 JSON 显然是使用与 UTF-8 不同的字符编码进行编码的——这很奇怪且不寻常,并且可能意味着在生成此 JSON 的任何系统中都存在错误。如果您无法修复该其他系统中的错误,那么您可以通过使用它所在的 actual 字符编码而不是 UTF-8 来解析 JSON 来解决它。
-
在 ISO-8859-1 编码(以及许多其他 ISO-8859-xx 编码)中,® 被编码为 0xae。请求正文可能使用 ISO-8859-1 或类似的。尽管非 Unicode 编码对于 JSON 来说非常罕见,但检查请求的内容类型可能是有意义的。它应该将编码指示为
application/json; charset=iso-8859-1。 -
我发现问题出在生成 json 的源系统中,我在标题中添加了以下编码内容,解决了问题“headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString ()+ ";charset=UTF-8"); "
标签: java json spring-boot gradle jackson