org.codehaus.jackson.JsonParseException: Ungültiges UTF-8-Mittelbyte 0xdf

8

Ich benutze das jackson-Framework für das Marshaling und das Unmarshalling von Daten zwischen JSON und Java. Alles funktioniert gut, solange die Eingabe keine Zeichen enthält wie:

  • ö
  • ä
  • ü
  • Ö
  • Ä
  • Ü
  • ß

Für Eingabedaten habe ich versucht:

%Vor%

sowie:

%Vor%

und die ganze Zeit bekomme ich die gleiche Ausnahme.

Das Mapping von JSON-Daten zum Java-Objekt erfolgt über:

%Vor%

Ich führe auch eine JSON-Datenvalidierung durch, die wie erwartet funktioniert, auch mit den obigen Zeichen.

Wie sollten solche Daten behandelt werden?

AKTUALISIEREN Dies sind die wichtigen Teile der Klasse MessageBodyReader

%Vor%     
123456789 11.08.2013, 19:34
quelle

2 Antworten

9

Die JSON-Spezifikation besagt, dass nur gültige Kodierungen UTF-8, UTF-16 und UTF-32 sind. Keine anderen Kodierungen (wie Latin-1) können verwendet werden. Ihre stringToStream-Implementierung legt die Codierung nicht explizit fest, sodass der Systemstandard verwendet wird. So hast du einen non-utf-Stream bekommen. Im nächsten Schritt versucht Jakson, den Stream mit einer der UTF-Kodierungen zu analysieren (er hat einen eingebauten Erkennungsalgorithmus) und schlägt fehl. Versuchen Sie, eine explizite Codierung festzulegen:

%Vor%     
Jk1 11.08.2013, 19:50
quelle
1

Sie haben bereits eine Antwort erhalten, aber eine offensichtliche Frage ist hier: Warum konvertieren Sie von String in einen Stream? Das ist unnötig und verschwenderisch - also übergeben Sie einfach die Saite wie sie ist. Dies wird auch das Problem beseitigen; Zeichenfolgen haben keine Codierung per se (das heißt: es gibt nur eine einzige speicherinterne Darstellung und es sind keine Konvertierungen erforderlich).

    
StaxMan 14.08.2013 05:34
quelle

Tags und Links