Я создал простой REST API в PHP, который запускает запрос к моей базе данных MySQL (полностью в кодировке utf-8) и возвращает результат в виде массива JSON. В PHP я также установил кодировку в UTF-8: mysqli_set_charset($con, "UTF8");
,
Поэтому, когда я звоню в мой сервис, как http://<host>/getData.php
в моем веб-браузере я получаю что-то вроде этого:
[{"id":"6","name":"föö","content":"bär"}]
что совершенно правильно.
Кроме того, я вызываю службу REST из моего приложения для Android с помощью OkHttp3. Но это всегда дает мне следующий вывод:
[{"id":"6","name":"föö","content":"bär"}]
Очевидно, что с кодировкой что-то не так или что-то в этом роде.
Вот мой код JAVA:
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse(config.getServerRoot() + php).newBuilder();
String url = urlBuilder.build().toString();
Request request = new Request.Builder()
.url(url)
.build();
// Get a handler that can be used to post to the main thread
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
// Check for failure
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
// Read data on the worker thread
final String result = response.body().string();
// result = [{"id":"6","name":"föö","content":"bär"}]
}
});
Можете ли вы сказать мне, что я делаю не так?
Ладно, я понял! Ренан Арсено напомнил мне, что моя Служба отдыха предоставляет мне объекты HTML. Так что вместо использования Html.fromHtml(result)
в Java — который, очевидно, также работает — я удалил функцию PHP htmlentities()
который преобразует мои символы в сущности HTML.
Теперь это работает. Благодаря вам!
Других решений пока нет …