GsonBuilder toJSon () неправильно кодирует неанглийский набор символов - PullRequest
0 голосов
/ 25 апреля 2018

Символы в контенте принимаются сервером, как показано ниже. Когда я запускаю один и тот же код на Mac OSX, он идет, как и ожидалось, но когда та же программа запускается на компьютере с Windows, я получаю такое поведение, нет проблем с кодом сервера, потому что когда я вызываю этот API из Почтальона и передаю эти символы, то они правильно принимаются сервером. Похоже, у GsonBuilder есть проблемы с обработкой неанглийских символов. Я сталкиваюсь с этой проблемой и с несколькими другими языками.

Εισιτή? Ια

        private String content =  "Εισιτήρια";

        public String post(String targetEnvironment) throws IOException{

        String gson = new GsonBuilder().disableHtmlEscaping().excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT).setLenient().create().toJson(this).toString();
            System.out.println(gson);
            OkHttpClient client = new OkHttpClient();

            MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            RequestBody body = RequestBody.create(JSON, gson);
            Request request = new Request.Builder()
              .url(targetEnvironment)
              .post(body)
              .addHeader("content-type", "application/json; charset=utf-8")
              .addHeader("accept", "application/json")
              .addHeader("client_application_id", "1")
              .addHeader("x-requested-with", "1")
              .addHeader("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)")
              .addHeader("accept-encoding", "gzip,deflate,br")
              .addHeader("cache-control", "no-cache")
              .build();

            Response response = client.newCall(request).execute();

            String response_string = response.body().string();
            System.out.println(response_string);
         }
...