我需要为我的网络请求之一实施一种方法,以解压缩gzip,然后解码base 64,然后将字节转换为String。我正在使用改造,并已实现如下所示。

我尝试使用此答案(okhttp 3: how to decompress gzip/deflate response manually using Java/Android)自己实现它,但没有成功。

我也尝试将其留空,因为okhttp显然是手动完成的,但是无论如何我都会得到如下所示的结果。

实施改造

                .connectTimeout(connectTimeout, TimeUnit.SECONDS)
                .writeTimeout(writeTimeout, TimeUnit.MINUTES)
                .readTimeout(readTimeout, TimeUnit.MINUTES)
                .build();

        if (User.getInstance().isDevMode()) {
            retrofit = new Retrofit.Builder()
                    .client(client)
                    .baseUrl(App.getContext().getResources().getString(R.string.dev_server))
                    .addConverterFactory(ScalarsConverterFactory.create()).build();
        }


将数据解压缩并解码后,预期结果应为字符串,例如“ Failed:Bad internet”(通常会更长)。

实际结果例如:
��m�]��k{�ȵ.�W��yNw�lJA᎜/G��[˶bɭN&�HED ��b����>k�­�"APm'�{�[ Q�������]W���ί������q!�����y��_���^,���'�Cz+b�dg��G?���$�y��t�T�<aI:��-�/���g6�d<e��HYr��Op<��fi�U���m��?�?,eƷ���/���_�iG�7�����y����E��ןZG/?�i]�\��>������_�.>\����_�<̋)�h�ہg�|�ķ�G�1�m~x*��,��~<Y!"}��o���e��_9Γ���f2�l�0���Wy*e__�O��){'�;��_�I���1�a�����^֥����"���0_�Xx�)�z8N�8O�Oq���~�a���o.�.7��'o�x������,g�e�Å�����H���K�՛���E��<ϗ�_��e�L��b,��D,�Ǔd�ϴ��B+�\0��_���oxF��[�i�*�R1f?�W }U�Y�pt*�$��,/�ٶ�x��d.iI^]�����Ǻ g!�_�ҤX�?/E��2��a���$?ø<-$�rO���i���p�L�y

最佳答案

我遇到了同样的问题。

去掉:
标头中的“接受编码:gzip,缩小”。

保持:
“内容类型:application / json; charset = utf-8”,
“接受:application / json”

当您提供自己的Accept-Encoding标头时,即指示OkHttp您要进行自己的解压缩。通过省略它,OkHttp将负责添加标头和解压缩。

杰西·威尔逊(Jesse Wilson)在这里回答:Retrofit and OkHttp gzip decode

关于java - 改造-解压缩gzip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56739312/

10-12 04:11