JSON无效的UTF-8中间字节

当(杰克逊,在这种情况下)JSON引擎尝试解析一些未使用UTF-8编码的JSON时,会发生此错误。

如何告诉引擎它应该期望与UTF-8不同的东西,例如UTF-16?

HttpHeaders requestHeaders = createSomeHeader();

RestTemplate restTemplate = new RestTemplate();

HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

String url = "someurl"

ResponseEntity<MyObject[]> arrayResponseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, MyObject[].class);

错误日志:

Caused by: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Invalid UTF-8 middle byte 0x20

at [Source: org.apache.http.conn.EofSensorInputStream@44d397b0; line: 92, column: 42]; nested exception is org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0x20

at [Source: org.apache.http.conn.EofSensorInputStream@44d397b0; line: 92, column: 42]

at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:138)

at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:154)

at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:74)

at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:622)

at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:608)

at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:449)

at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:404)

at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:380)

... 4 more

Caused by: org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0x20

at [Source: org.apache.http.conn.EofSensorInputStream@44d397b0; line: 92, column: 42]

at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1213)

at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:375)

at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidOther(Utf8StreamParser.java:2132)

at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidOther(Utf8StreamParser.java:2139)

at org.codehaus.jackson.impl.Utf8StreamParser._decodeUtf8_3fast(Utf8StreamParser.java:1962)

回答:

JSON数据必须编码为UTF-8,UTF-16或UTF-32。JSON解码器可以通过检查字节流的前四个八位字节来确定编码:

       00 00 00 xx  UTF-32BE

00 xx 00 xx UTF-16BE

xx 00 00 00 UTF-32LE

xx 00 xx 00 UTF-16LE

xx xx xx xx UTF-8

听起来好像服务器正在以某种非法编码(ISO-8859-1,Windows-1252等)编码数据。

以上是 JSON无效的UTF-8中间字节 的全部内容, 来源链接: utcz.com/qa/420808.html

回到顶部