从android应用程序调用php restapi不会显示umlauts(äüö) 正确地

quhf5bfb  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(372)

我在php中构建了一个简单的restapi,它向mysql数据库(完全utf-8编码)发出一个查询,并以json数组的形式返回结果。在php中,我还将字符集设置为utf-8: mysqli_set_charset($con, "UTF8"); .
所以当我打电话给我的服务 http://<host>/getData.php 在我的网络浏览器中,我得到这样的信息:

[{"id":"6","name":"föö","content":"bär"}]

这是完全正确的。
另外,我正在使用okhttp3从android应用程序调用rest服务。但这总是给我以下输出:

[{"id":"6","name":"f&ouml;&ouml;","content":"b&auml;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&ouml;&ouml;","content":"b&auml;r"}]
        }
    });

你能告诉我我做错了什么吗?

ecfsfe2w

ecfsfe2w1#

好的,我知道了!RenanArceno提醒我,我的rest服务给了我html实体。所以不用 Html.fromHtml(result) 在java中,我删除了php函数,显然效果也不错 htmlentities() 它将我的字符转换为html实体。
现在起作用了。多亏了你!

相关问题