有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    问题出在服务器端php代码上。我有一个脚本,已经用UTF-8编码了。我用php函数utf8_encode()对字符串“bite wählen”进行了编码,这导致了我的问题

    谢谢你,麦克道尔,你的提示让我走上了正轨

    解决方案是使用函数,只发送字符串“bite wählen”