2012-04-04 16 views
26

私は自分で答えを見つけることができませんでした。 ObjectMapperを使用してオブジェクトを直列化および逆シリアル化するときにjacksonにUTF-8エンコーディングを使用するよう指示する方法はありますか?UTF-8エンコーディングのJackson ObjectMapper?

おかげ

答えて

39

ジャクソンは自動的にソースで使用されるエンコーディングを検出:JSONの仕様に従って、唯一の有効なエンコーディングは、UTF-8、UTF-16およびUTF-32です。他のエンコーディング(Latin-1など)は使用できません。 このため、自動検出はパーサーによって簡単に実行できます。このため、エンコード検出は受け入れられません。 したがって、入力がUTF-8の場合、そのように検出されます。

出力には、UTF-8がデフォルトです。別のエンコーディングを明示的に使用する場合は、JsonGeneratorを明示的に作成し(JsonEncodingのメソッドを使用)、これをObjectMapperに渡すことができます。

どちらの場合でも、手動でjava.io.Reader/java.io.Writerを手動で構築し、必要なエンコーディングを使用することができます。

+1

JSONをUTF-16ではなくUTF-8でエンコードするのに何時間も費やしたときに、UTF-8をどのようにデフォルトにすることができるかわかりません。 – cbmanica

+3

@cbmanicaあなたが 'java.io.OutputStream'を与えたとき、UTF-8はJacksonの絶対的なデフォルトです。しかし、他のデフォルトもあります:JDKには、あなた自身のWriterインスタンスを構築するか、あるいは他のいくつかのlib/frameworkがそれを行う場合、デフォルトのエンコーディングがあります。これらはジャクソンの外にあります。 – StaxMan

+0

@cbmanica助けてくれたコードを教えてください。私はまったく同じ問題を抱えているようです。 – Tregoreg

関連する問題