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