JSON содержит символы Юникода - PullRequest
0 голосов
/ 20 января 2020

My Java - REST API платформы Jersey вызывает другой сервис, который возвращает следующий JSON ответ. Я зарегистрировал ответ от дочерней службы в своих журналах и вижу, что значение ErrorMessage содержит значение Unicode, например \u2019, а не одинарную кавычку (').

{
  "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."
            }
        }
    }
}

Я верю, что что-то есть в кодировке символов, но я не могу исправить вопрос.

1 Ответ

0 голосов
/ 21 января 2020

TL; DR
Видеть не значит верить. Это зависит от кодировки в вашей среде.


Фрагмент кода
Следующий фрагмент кода показывает десериализацию строки JSON (часть исходного ответа).
Если кодировка вашей среды - UTF-8, Gson преобразует ее правильно без указания кодировки.
И если вы уже знали, что исходная строка была закодирована с помощью UTF-8, вы получите другие результаты, если просмотрите ее. с UTF-8 и ISO-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 ":" К сожалению, содержимое недоступно. "}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...