2012-04-04 10 views
26

Ja sam nie byłem w stanie znaleźć odpowiedzi. Czy istnieje sposób, aby powiedzieć jacksonowi, aby używał kodowania UTF-8 podczas używania ObjectMapper do serializacji i deserializacji obiektów?Jackson ObjectMapper z kodowaniem UTF-8?

Dzięki

Odpowiedz

39

Jackson automatycznie wykrywa kodowania stosowany w źródle: zgodnie ze specyfikacją JSON ważne wyłącznie kodowania są UTF-8 UTF-16 i UTF-32. Nie można używać innych kodowań (takich jak Latin-1). Z tego powodu automatyczne wykrywanie jest łatwe i wykonywane przez analizator składni - z tego powodu nie jest akceptowane wykrywanie kodowania. Tak więc, jeśli wejście jest UTF-8, zostanie wykryte jako takie.

W przypadku wyjścia, UTF-8 jest domyślny; ale jeśli wyraźnie chcesz użyć innego kodowania, możesz jawnie utworzyć JsonGenerator (metodą, która zajmuje JsonEncoding) i przekazać to do ObjectMapper.

Alternatywnie w obu przypadkach można oczywiście ręcznie skonstruować java.io.Reader/java.io.Writer i zastosować kodowanie, które chcesz.

+1

Nie jestem pewien, w jaki sposób UTF-8 może być domyślny, kiedy spędziłem wiele godzin próbując uzyskać kodowanie JSON w UTF-8 zamiast UTF-16. – cbmanica

+3

@ cbmanica Zaufaj mi, UTF-8 jest absolutnym domyślnym dla Jacksona, gdy podasz 'java.io.OutputStream'. Ale są też inne ustawienia domyślne: JDK ma domyślne kodowanie, jeśli sam tworzysz instancję 'Writer' lub robi to inne lib/framework. Są na zewnątrz Jacksona. – StaxMan

+0

@ cbmanica Czy mógłbyś podzielić się swoim kodem, który ci pomógł? Wygląda na to, że mam ten sam problem. – Tregoreg

Powiązane problemy