Почему вывод NSString работает, но не может использовать фактическую переменную? - PullRequest
1 голос
/ 13 марта 2019

Мое приложение получает данные из службы RESTful, декодирует и распаковывает данные. Тем не менее, он не работает полностью.

decodedString остается пустым при использовании notWorkingInput - если я копирую и вставляю NSLog notWorkingInput во вход NSString, код работает отлично.

Почему не работаетWorkingInput, а ввод - нет, они содержат точно такие же данные.

КОД:

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
  ^(NSData *receivedData,
    NSURLResponse * _Nullable response,
    NSError * _Nullable error) {


      //this is not working
      NSString *notWorkingInput = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
      NSLog(@"Input %@", notWorkingInput);

      //THIS IS THE EXPECTED OUTPUT FROM THE ABOVE NSLog - this works but notWOrkingInput doesn't
      //NSString *input = @"H4sIAAAAAAAEAK2abW\/bOBLHv0rhe5scOEMOH7KvXMftBuvEQewskFv0hShRh+KySdEtcDgU\/e5HyUkspx6b2kxcJLUe\/qLI\/4+cIfl9srpbzZbn88nZBLqf2MbJyeRm\/vHng+u76+7I7fX5dD3P329X85vJ2ff+78V5PuNjQmjABhWjscGFSplokqEKYmWR8j0frqaXnci0+vr4kL8vnr6vvn39XP\/nvnpo8sHrX5dX3UFjXP6nlKIQ8uH55fRikQ\/n\/\/42v+ufWCcHsXZV0jXkxzRVA75ymMjWrWqruLn0cjrL15LS2r8HtNP3fvKjP9GVfoTUxXp++XQ5UH6Xm+Xl+qIvPiqwp4pONawRzkCdKfVPtfnpKm65vSycKn2Kfg10BmH3st+ni4uuamfL26t1foQ+earr1Xq6vl3lIyeT2XQxvzqfbuo7amWb6BK0AU3bpFg1SXvQTUPBttR0b\/l8w+ri6sOye99xCieT8+ldfvQf3yer+Xp9cfWxL0Y+ODl79\/LaKqxV987D9\/lxcvAWUONvgSO34Ktb3Cng+Fv0yILZUxj7+vkpbuQt\/hSPvf6eGrPjbxlbMH0KNP6WsQXT+wv27lO2+GI5++16Mb2a\/fqxN2rnbILgTEZ0Mc3H1Abd8+Wydz327Hed1nSxIXn9r+58z3VXimcB4gRMqYLlFFSpguMUdKmC5xRcqUJgFMAXKnjFKYRSBeDegkoVkFOwpQqaU4BSBdaSxTXJedIU1wPnSVNcD5wnTamjPOdJU1wPnCdNqaMC50kqZTNwnqRSPwTOk1TaRwXOk1TaPwTOk1TaywXOk1TqycB5kko9GThPUqknA+dJKvVk4DxJZZ7EPKQxCrbMk1mB86Qt82RW4BxlisvA+UGXuTorcK2pi2uSa01d5occdXA1qctcnRU4uk1pPQDHhS1VQM5RurQ1kR15S9sCOUfpMrqzAtdH6bJeLiuwnizr5bICO24Wl4EdN0vZRK6H0aUKmmtNU1oPmm3Nsn4SNVsPUOhqjRzdUNgWmq1JKKwHrdmYtrB\/0GxbQCEXWnM9DBT2cpptTSxsC0OcAhR60liuLQoNZRzXFIU9lHFsSxT2kobNskorgU2yDjv6U\/56cTm\/vll+uFjM+\/Q3n86nJjkUIN+2dQyuMrWJISlLZGyMWnsP3dTOVih0X56m4q4fv37LJ2fLxfImf\/0HUONTNdl50Or2\/Wr+cfX8vE032NXiSzk3l68WF7NOU5mctv\/Sz4v9Ai8f9fzpc\/+tDm518JVOr6Bc\/\/vl86L1SkdvdfReHbWrw5XHbHXMW3Roq0Nv0bFbHfsWHbfVcW\/R8Vsd\/xadsNUJb9DpZhtefKjeIjQ09GtHjxIaOBr2W5oX+vQk1UPdKOtNSME2aOpEsYqpbiv0dUhkY9qBun\/3Z6q\/pb++fX749xDs7fz0YbCNcjzYL6WnXaT3VINR\/hjYRdVpVBAB24ASAdsAiIBtAEXANqBFwDZgRMA2QCJgG7AyYBtwMmAb8EJgQxWbCA0Y772psQlVTVElBIRENcIu2AOuq\/v708cv6WEItp7NDLmjYIOhI1yjPqMwGLBfPsNaAGMlsAbjJKgG4yWgBhMkmAZSEkgDgQTRQCgBNJCW4BnIiOAMRCI0A1khmAkqSrbRyeV3tDrFNic5vqIISNC4VzDjgOaH9N\/09Uv+GeLsg2tcc3ycJneM57JejZwI0FlHhOisI4J01hFh2pAXgTrriFCddUSwzjoiXGcdGbCzkAzZWUgMbQxWBYgOTbdhoo0xxAqCIvId3e0O2kOyp5fvlg\/3\/3sdf7ft8WGa+PA7Z9RIXV6N9lheDcRH39An1P1+lMGr702rgUSCb7AisTdYkdAbrEjkDVYk8AYrEneDFQm7wcpE3WBlgm6wUjG3DbpO6IL2OadWqY1t3VLdhBBVnYdvt8OyHbB8nv58HILctkWJNGI4BPJmggzoWLyNWvEgQy8DRTLAggzYy2CRDLIgg+5ldJGMZkGGzeShKZIxLMhAvQwVyRALMthexhbJWBbkpy7XFck4FmTwvYwvkvE8yJu+P\/8u0Qk8yLjJG4t8bNQBkDdjEV+eIche5eBao2sxkqlU9LbSUWlKAVKNKe7G28PsOcfb6\/TXznS3jV6748mzMe4AzXCmocPQqGO1YIzncR41F+F5nsfp8ECP0+GJHqfDIz1Oh2d6nA4P9TgdnupxOgewHid0gOtRQuEQ2GNGaO9slSqsPTXOOKWDbkLy6GpEFaw2O2C7Adfz3+dX6yHVATFiPD5Eex5q5Z86fjXskvZWAYYDQ7Q9033Hr44uhWEQQRqDCNEYRIDGIMIzBhGcMYjQjEEEZgwyLGOQQVkrMZKjThqCCU0g0xofa6i0Mr5pwfm63c2b\/YDkD9PZenlzN2Q5pTbjX7AgbY6uW\/kCCrOOzLqVNjLrVppk1q00yaxbaZJZt9Iks26lSWbdSpPMupUmoXUrTULrVpqkcui6tcnm9LdRTWOodqEmE1Imu2kpOqd2uKYB14vPD\/Xj\/c6yFaoqBDg+RsMBrPuMs9ttcjz9gAPzYXrfGM3I8FBvkjPEZ5kDTYIowjSiCNKIIkQjigCNKMIzogjOiDI0I8rAjCjFcpOH5cZWQQWfo20bQm2xsm2FOjnt612W9YDl65\/ntts2hIIpMbAHkuiem7IlaCeSQ4MTibfBicTb4ETibXAi8TY4kXgbnEi8DU4k3gYnE2+Dk4m3wUvF201Tx5Z8HcB2uz9dVVGdLFUQrFPVK5bNgGX95c8hx5U1jTsea8POVrmf5l27NSrqh9S+rDzHw7mnvTOCm7ngPcPprgy\/8\/OpHK4r057Qf1eG3\/j5NM8JZ3Q0QgAvsu8TvMi2T\/Aiuz7Bi2z6BC+y5xOCzJZPGE64vIXj4YzL3+D404\/\/A2ssUZ+YQQAA";


      NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:notWorkingInput options:0];


      NSData *unzippedData = [decodedData gunzippedData];
      NSString *decodesdString = [[NSString alloc] initWithData:unzippedData encoding:NSUTF8StringEncoding];

      NSLog(@"DECODED STRING   %@", decodesdString);





  }] resume];
 }

1 Ответ

1 голос
/ 13 марта 2019

При создании необработанной строки (которая не является частью JSON, xml и т. Д.) Из данных вы можете легко получить немного другой вывод - результирующая строка будет содержать несколько escape-последовательностей, таких как \n или \t, который NSLog не будет печататься по очевидной причине. Эти символы определенно препятствуют созданию строгих структур данных (таких как Base64).

Чтобы обойти это, просто добавьте опции IgnoreUnkownCharacters в свой конструктор данных Base64:

[[NSData alloc] initWithBase64EncodeString:notWorkingInput options:NSDataBase64DecodingIgnoreUnknownCharacters];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...