JSON包含Unicode字符

问题描述 投票:0回答:1

我的Java-Jersey框架REST API调用另一个服务,该服务返回以下JSON响应。我已经在日志中记录了来自子服务的响应,并且可以看到ErrorMessage的值包含像\u2019这样的Unicode值,而不是单引号(')。

{
  "id": "SAMPLE",
  "version": 1,
  "status": {
      "lastReceivedError": {
          "ErrorDateTime": 1576588715,
          "ErrorCode": "TEST3200",
          "ErrorMessage": "We\u2019re sorry, the content is not available."
      }
  }
}

我必须将这些值映射到我的模型中,并以JSON的形式返回。我使用GSON将上述JSON字符串转换为对象。并将该对象中的值映射到我的响应对象中。我最后的传出JSON响应如下所示,其中单引号显示为问号(?)。

{
    "MyResponse": {
        "success": {
            "lastReceivedError": {
                "errorDateTime": "2019-12-17T13:18:35Z",
                "errorCode": "TEST3200",
                "errorMessage": "We?re sorry, the content is not available."
            }
        }
    }
}

我相信编码字符周围有一些问题,但是我无法解决此问题。

java json utf-8 jersey unicode-escapes
1个回答
0
投票

TL; DR眼见为实。这取决于您环境中的编码。


代码段以下代码段显示了反序列化JSON字符串(原始响应的一部分)。如果您环境的编码为UTF-8,则Gson将正确转换它而不指定编码。而且,如果您已经知道原始字符串是用UTF-8编码的,则用UTF-8ISO-8859-1查看它会得到不同的结果。

String jsonStr = "{\"ErrorMessage\": \"We\u2019re sorry, the content is not available.\"}";
Gson gson = new Gson();
JsonObject data = gson.fromJson(jsonStr, JsonObject.class);

System.out.println(data.toString());
System.out.println(new String(jsonStr.getBytes("UTF-8"), "UTF-8"));
System.out.println(new String(jsonStr.getBytes("ISO-8859-1"), "UTF-8"));

控制台输出

{“ ErrorMessage”:“很抱歉,该内容不可用。”}{“ ErrorMessage”:“很抱歉,该内容不可用。”}{“ ErrorMessage”:“对不起,内容不可用。”}

© www.soinside.com 2019 - 2024. All rights reserved.