JSON Ungültige UTF-8-byte-Mitte
Dieser Fehler passiert, wenn die (Jackson, ist in diesem Fall) JSON-engine versucht zu analysieren, einige JSON, die nicht in UTF-8 codiert.
Wie zu sagen, die engine, die Sie sollten erwarten, etwas anderes als UTF-8, wie 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);
Fehler melden:
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)
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSON-Daten müssen codiert als UTF-8, UTF-16 oder UTF-32. Die JSON-decoder können bestimmen, dass die Codierung durch die Prüfung der ersten vier Oktette der byte-stream:
Es klingt wie der server die Codierung von Daten in einige illegale Codierung (ISO-8859-1, windows-1252, etc.)
Habe ich diese Ausnahme, wenn in der Java-Client-Anwendung, die ich war serialisieren der JSON-wie dies
- und auf der Server-Seite war ich mit Spring Boot als REST-Endpunkt.
Ausnahme:
verschachtelte Ausnahme ist com.fasterxml.jackson.databind-Methode.JsonMappingException: Ungültige UTF-8-start-byte 0xaa
Mein problem war, dass ich die Einstellung nicht die richtige Verschlüsselung für die HTTP-Client.
Dies löste mein problem:
Android Inhaltstyp HttpPost
Habe ich diese nach dem speichern der JSON-Datei mit Notepad2, so hatte ich, um es zu öffnen mit Notepad++ und dann sagen Sie "konvertiere zu UTF-8". Dann hat es geklappt.
Hatte ich dieses problem nicht konsistent zwischen den verschiedenen Plattformen, da habe ich JSON-String von Mapper und habe den Text selbst. Manchmal ging es in die Datei als ansi-und anderen Zeiten korrekt als UTF8. Ich wechselte zu
lassen Mapper tun, die Datei-Operationen, und es begann gut.
Auf dem off-chance, es anderen helfen kann werde ich teilen eine Verwandte Anekdote.
Begegnete ich genau diesem Fehler (Ungültige UTF-8-middle-byte 0x3f) ausführen eines PowerShell-Skript über die PowerShell Integrated Script Environment (ISE). Das identische Skript, ausgeführt außerhalb der ISE, funktioniert gut. Der code verwendet die Confluence v3 und v5.x REST-APIs und dieser Fehler wird protokolliert, auf dem Zusammenfluss v5.x-server - vermutlich, weil der ISE irgendwie düngt mit der Anfrage.