2012-04-04 45 views

回答

39

傑克遜自動檢測在源所使用的編碼:根據JSON說明書中,唯一有效的編碼是UTF-8,UTF-16和UTF-32。沒有其他編碼(如Latin-1)可以使用。 由於這個原因,自動檢測很容易,並且由解析器完成 - 因爲這個原因,不接受編碼檢測。 所以,如果輸入是UTF-8,它將被如此檢測。

對於輸出,UTF-8是默認值;但如果您明確要使用其他編碼,則可以明確地創建JsonGenerator(使用方法需要JsonEncoding),並將其傳遞給ObjectMapper

或者在這兩種情況下,你當然可以手動構建java.io.Reader/java.io.Writer,並使其使用任何你想要的編碼。

+1

我不知道UTF-8如何成爲默認值,當我花了幾個小時試圖讓JSON以UTF-8而不是UTF-16編碼。 – cbmanica 2014-03-14 22:31:57

+3

@cbmanica相信我,當給予java.io.OutputStream時,UTF-8是Jackson的絕對默認值。但還有其他默認值:如果您選擇自己構造'Writer'實例,或者其他某個lib/framework會執行它,則JDK將使用其默認編碼。這些在傑克遜之外。 – StaxMan 2014-03-17 19:56:18

+0

@cbmanica請你分享一下你的代碼嗎?似乎我有同樣的問題。 – Tregoreg 2015-05-01 03:05:28