当前位置: 首页 > 面试题库 >

JSON无效的UTF-8中间字节

敖和韵
2023-03-14
问题内容

当(杰克逊,在这种情况下)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等)编码数据。



 类似资料:
  • 我使用jMeter通过post请求向测试服务器发送json。 以下请求总是失败: 响应数据中的错误消息为: 请求根本不发送到服务器。其他请求(例如将类别中的值替换为其他有效类别,如“Delis”)工作完美。 我猜这是一个与“Café”有关的编码问题,但我不知道如何解决它。知道吗?谢谢

  • 在Java中,我向JSON对象添加一些属性,并将这些值发送到HTTPS URL(REST API)。服务器抛出一些错误,如“无效的utf-8开始字节0xb0”。下面是我的代码:

  • 问题内容: 我在字符串列表的json.Marshal上得到这个: 原因很明显,但是如何在Go中删除/替换这样的字符串?我一直在阅读docst 和包,似乎没有明显/快速的方法。 例如,在Python中,您可以使用一些方法删除无效字符,将其替换为指定字符或严格设置,这会导致无效字符的异常。如何在Go中做等效的事情? 更新:我的意思是得到异常的原因(紧急?)-json.Marshal期望有效的UTF-8

  • 问题内容: 我有一个包含阿拉伯字符的xml文件。尝试解析文件时,出现异常,MalformedByteSequenceException:2字节UTF-8序列的无效字节2。我使用POI DOM来解析文档。 日志是 该异常仅在Windows Machine中出现,在Linux Machine中不出现。我该如何解决此问题。任何建议都应是可取的。 问题答案: 我已解决问题,方法是使用UTF8格式创建XML

  • 在解析JSON请求体时获取以下异常, 请求正文有一个特殊字符“®”(非UTF-8),解析时失败。如何在请求正文中处理这个非UTF-8字符? 我想保存具有特殊字符的对象。我试着研究,但没有找到一个合适的解决方案。提前谢谢。

  • 我正在使用JMeter将JSON作为主体发送一个post请求。 当我使用Postman执行相同的请求时,我得到了成功的响应。 但使用JMeter时,我得到的是“JSON解析错误:无效的UTF-8起始字节0xB0”。 基于被问到的类似问题,它似乎-(连字符)造成了问题,但不是100%确定这一点。 这些是我尝试的头的组合: 内容类型:Application/JSON;Charset=UTF-8 Con