java.lang.IllegalArgumentException: неожиданный низкий суррогатный символ ' ' со значением 56899 по индексу 1063

Я использую Retrofit 2 с OauthInterceptor и приложение, которое использует Tiwtter Api. Я могу войти в Twitter с помощью этого перехватчика, так как подписи генерируются должным образом в соответствии со стандартами OAuth1 для простых запросов Get и Post. Но я сталкиваюсь с проблемой, когда пытаюсь загрузить изображение в твиттер, используя тот же перехватчик. После того же шага в почтальоне работает нормально, и я могу создать твит с изображением.

Вот код, который у меня есть

// TwitterService

    @FormUrlEncoded
    @POST("/1.1/media/upload.json")
    Call<TwitterUploadData> uploadImage(@Field("command") String command, @Field("media_type") String mediaType, @Field("total_bytes")String totalBytes);

    @Multipart
    @POST("/1.1/media/upload.json")
    Call<ResponseBody> uploadImageChunk(@Part("command") String command,
                                        @Part("media_id") String mediaId,
                                        @Part("segment_index") String segmentIndex,
                                        @Part MultipartBody.Part imagePart);

Загрузка изображения выполняется в три этапа: 1. Загрузите носитель INIT, который отлично работает с методом uploadImage(...). 2. ДОБАВИТЬ в мультимедиа с идентификатором, указанным в шаге 1. Я делаю это с помощью метода uploadImageChunk(...), прикрепляя изображение в качестве тела составного запроса.

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://upload.twitter.com")
                .client(httpClient.build())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        File file = new File(imageFile.getPath());
        MultipartBody.Part imagePart = MultipartBody.Part.createFormData("media", imageFile.getFileName(),
                RequestBody.create(MediaType.parse("image/"+imageFile.getExtensionType()), file));

        TwitterService twitterService = retrofit.create(TwitterService.class);
        Call<ResponseBody> imageChunkUploadCall = twitterService.uploadImageChunk("append", twitterUploadData.getMediaIdString(),
                "0",
                imagePart);

        imageChunkUploadCall.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Log.d(TAG, "onResponse: ");
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d(TAG, "onFailure: ");
            }
        });

Но я получаю это исключение во время процесса подписания OAuth1.

java.lang.IllegalArgumentException: Unexpected low surrogate character '�' with value 56899 at index 1063 

Вышеупомянутое исключение создается из метода signRequest (...) Oauth1SigningInterceptor.java.

private static final Escaper ESCAPER = UrlEscapers.urlFormParameterEscaper();
   boolean first = true;
    for (Map.Entry<String, String> entry : parameters.entrySet()) {
        if (!first) base.writeUtf8(ESCAPER.escape("&"));
        first = false;
        base.writeUtf8(ESCAPER.escape(entry.getKey()));
        base.writeUtf8(ESCAPER.escape("="));
        try{

        base.writeUtf8(ESCAPER.escape(entry.getValue()));
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

Я не уверен, какой ESCAPER следует использовать для подписи запроса OAuth1 в случае составного запроса изображения. Ключ и значение в этом случае содержат некоторые специальные символы, которые текущий ESCAPER из утилит guava не может корректно экранировать и выдает следующее исключение

 java.lang.IllegalArgumentException: Unexpected low surrogate character '�' with value 56899 at index 1063 in 's�8�N��z=����J=v��0���)��6O�db��[�>��Ou+`4ɥ�iߑo�h�n��z��״�>[�E�[Iyu470�/���?������_��~�5���R�[������eX��1�U���t��յσ�uս����m�i�b����*�޼�MR����Z��:�����Moj� >l�26(�'�۽r����$���bmz��c��жb������R�?��?�|7�������㴴��o�����J������נ�8���o�]"MR��.��vIuo)�l��r��k���hz���CD�ޓ{?����m�ٶ�p�w�f���'���[��a�[|.�����N����h����������=(��E��x3Y�uj��G�Y��hd��܂8������C�{m�>;[%��٣��m�!���d�^*���%�}cK7�����\�l�I#1�̠�~�t�_�3�:U����9/��U����@墈`�`:ps�@��6���"�-�$д���/c#��('�9XF�����ɱ�CY���x[��Q��4���6���[F2R5���������U��տ�b�?1�x~�լm�1ș�d�rs�''�l[�qs���K�D/�Ŧ�3[F��x_�q��W�R9�s���������E�|6��,�Ki2:yZu⋔�eޘa�~nx�z���H�u-[��s�"�j���7A��ѝ��a����u�o�[E��杫_��_fd������G?*(�r�����Z��I-���Eqx�!`�0Kc�>S��P�xk��/�c�=N��'!�7�?������]���ⶒe��c�T�2:��w��-�+�1I6�-�ź��L�m$HI��n>��*�ĭ_OѼ�M�]�k������HѶGv8<J���>\�q��\���Ֆ����s<�H w9��s���7�|�����    Y.�.^;�u�X19q�����O�^#0|��:����\3��*�c4������T?/������$�coo�%��ʌ�no����#9�@գ�=��eoy/�s�˒w�Pd�rry�=��w�|C��gw=�����Kn�$xA!bV�⼑��׭�yk�Yx#C��Y�S��}�c�=��j>�������K����ۮ�2�>=>l�epH���W���mH�a��h�������C�[�2�� ���TsֺM�2x;Ŗ�n��Q���dy����a��ڹ��^;�|_�]��q�ީy��H����p$����'

0 ответов

Другие вопросы по тегам