gson nicht in UTF8

Fohnbit

Top Contributor
Hallo!

Ich rufe einen json String über eine URL ab und erzeuge eine Klasse:
Java:
@Override
    public void onStart(boolean value) {
        if (value) {

            try {
                target = new HttpHost(getPropertyIpadresse());
                client = HttpAsyncClients.custom().setIOReactorConfig(ioReactorConfig).build();
                client.start();
                execute(true, "/api/status");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            client.close(CloseMode.IMMEDIATE);
        }

    }


    public void execute(boolean initate, String url) {
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                final SimpleHttpRequest request = SimpleRequestBuilder.get().setHttpHost(target)
                        .addHeader("Accept", "application/json").addHeader("Accept-Charset", "utf-8").setPath(url)
                        .build();

                final Future<SimpleHttpResponse> future = client.execute(SimpleRequestProducer.create(request),
                        SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() {

                            @Override
                            public void completed(final SimpleHttpResponse response) {                               
                                api = new Gson().fromJson(response.getBodyText(), Api.class);
                                updateData();
                            }

                            @Override
                            public void failed(final Exception ex) {
                                ex.printStackTrace();
                                restartConnect();

                            }

                            @Override
                            public void cancelled() {
                                restartConnect();
                            }

                        });
                try {
                    future.get();
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                }

            }
        });

    }

Bei der Zeile:
api = new Gson().fromJson(response.getBodyText(), Api.class);

wird die Klasse geschrieben. Aber leider sind dort die Umlaute nicht korrekt.

Wie kann ich das gson auf UTF8 umstellen?

Tippe ich die URL in Chrom ein, sehe ich im browser das korrekte json mit Umlauten.
Aber nicht wenn ich mit gson 2.5 das ganze mache
 
Das Problem dürfte nicht an Gson liegen, schließlich bekommt das Teil ja bereits einen String; abgesehen davon ist JSON per Definition UTF-8 kodiert.

Du könntest die response.getBodyBytes() einmal in eine Datei schreiben und hinsichtlich des Encodings untersuchen. Alternativ probier einfach mal:
Java:
api = new Gson().fromJson(new String(response.getBodyBytes(), "ISO-8859-1"), Api.class);
 
Das Problem dürfte nicht an Gson liegen, schließlich bekommt das Teil ja bereits einen String; abgesehen davon ist JSON per Definition UTF-8 kodiert.

Du könntest die response.getBodyBytes() einmal in eine Datei schreiben und hinsichtlich des Encodings untersuchen. Alternativ probier einfach mal:
Java:
api = new Gson().fromJson(new String(response.getBodyBytes(), "ISO-8859-1"), Api.class);
Danke. Das hat zwar nicht geklappt, aber dieses:
Java:
api = new Gson().fromJson(new String(response.getBodyBytes(), "UTF-8"), Api.class);

Nun wird mir der Text korrekt dargestellt
 

Zurück
Oben