0
我有一些關於gson編碼的問題。 我有發送如下JSON響應一個web服務:Jersey REST字符編碼
{
"version": "v2",
"result": {
"class": "SearchSizeBean",
"result_list": [
{
"id": 0,
"name": "Bitte w\u00c3\u00a4hlen"
},
{
"id": "21",
"name": "176"
}
]
}
}
我請求與下面的代碼的web服務:
ClientResponse response = webResource.path(version)
.path(path)
.accept(MediaType.APPLICATION_JSON)
.method(method.name(), ClientResponse.class, paramMap);
if (response.getStatus() == 200)
{
responseBody = response.getEntity(String.class);
...
}
當檢查responseBody得到的字符串示出的完全一樣JSON上述相同的結果。但是,使用GSON將JSON字符串轉換爲對象之後,字符轉換錯誤:
與GSON解析:
Gson gson = new GsonBuilder().disableHtmlEscaping()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(Transferable.class, new TransferableDeserializer())
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
RestResponse responseDTO = gson.fromJson(responseBody, RestResponse.class);
得到的內容:
Response: SearchSizeBean[
resultList={
PosSize [id=0, name=Bitte wählen],
PosSize [id=21, name=176]
}
]
UPDATE:
我複製了錯誤的JSON內容。我編輯了JSON以顯示正確的JSON字符串。數據以unicode w\u00c3\u00a4
發送。當我通過GSon檢查轉換後的響應時,它變爲十六進制:C3 82 C2 A4
'「name」:「Bittewählen」' - 應該是wählen,對不對?數據看起來像UTF-8解碼爲windows-1252。我首先要驗證服務中的數據。當您查看十六進制編輯器中的原始響應字節時,應將其編碼爲UTF-8中的「C3 A4」。 – McDowell
你如何得到你在這個問題的頂部顯示的字符串?你提到responseBody有同樣的事情。這是否意味着你做了System.out.println(responseBody)並在打印的內容中看到了「\ u00c3 \ u00a4」? – Pace
'「Bitte w \ u00c3 \ u00a4hlen」'是Bittewählen的Unicode轉義表示。 Bittewählen將會是''Bittewühüehlen''。 – McDowell