Подтвердить что ты не робот

Может ли кто-нибудь уточнить кодировку юникода Gson?

В следующем минималистическом примере:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonStuff {

    public static void main(String[] args) {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        System.out.println(gson.toJson("Apostrophe: '"));
        //Outputs: "Apostrophe: \u0027"
    }   
}

Апостроф заменяется представлением unicode в распечатке. Тем не менее, строка, возвращаемая из метода toJson, буквально имеет символы '\', 'u', '0', '0', '2', '7'.

Декодирование с помощью json действительно работает и дает строку "Apostrophe:" в отличие от "Apostrophe:\u0027". Как его декодировать, чтобы получить тот же результат?

И еще один вопрос: почему случайный символ Юникода, такой как ش, не закодирован?

4b9b3361

Ответ 1

По умолчанию, gson Unicode вытесняет определенные символы, из которых ' - один. (См. HTML_SAFE_REPLACEMENT_CHARS в JsonWriter для полного списка.)

Чтобы отключить это, выполните

builder.disableHtmlEscaping();

Ответ 2

Используйте следующий код для кодирования

 response.setCharacterEncoding("UTF8"); // this line solves the problem
 response.setContentType("application/json");

Это решило мою проблему.