java Jersey REST字符编码
我有一些关于gson字符编码的问题。 我有一个Web服务,它发送以下JSON响应:
{
"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);
...
}
当检查ResponseBy时,结果字符串显示与上面提到的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]
}
]
更新:
我复制了错误的JSON内容。我已经编辑了JSON以显示正确的JSON字符串。数据以unicode w\u00c3\u00a4
格式发送。当我检查GSon转换后的响应时,它变成十六进制:C3 82 C2 A4
# 1 楼答案
问题出在服务器端php代码上。我有一个脚本,已经用UTF-8编码了。我用php函数
utf8_encode()
对字符串“bite wählen”进行了编码,这导致了我的问题谢谢你,麦克道尔,你的提示让我走上了正轨
解决方案是不使用函数,只发送字符串“bite wählen”