Строка Base64, закодированная с помощью NSJSONSerialization, экранирована обратной косой чертой

Я пытаюсь отправить изображение на сервер с помощью JSON. Данные по-прежнему верны до тех пор, пока я не настрою свой словарь для кодирования с помощью NSJSONSerialization: функция, которую я использую:

- (NSData*) getHTTPBody
{
    if ([NSJSONSerialization isValidJSONObject:jsonMessage])
    {
        NSError * error = Nil;
        NSData * jsonData = [NSJSONSerialization dataWithJSONObject:jsonMessage options:0 error:&error];
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        return jsonData;
    }
    return Nil;
}

со следующим вводом:

Printing description of self->jsonMessage:
{
    function = addattachment;
    variables =     {
        attachment =         {
            enddate = 1377475200000;
            file = "/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsj4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwD408V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttJ2r8Q0eJpx/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=";
            filename = "photo.jpg";
            label = "Bhhhb ";
            startdate = 1377475200000;
        };
    };
}

Что кажется правильным. Фактически, я протестировал строку Base64 и преобразовал ее обратно в онлайн-декодер, она работает безупречно.

В любом случае создается объект JSON NSData. Из целей тестирования я конвертирую его обратно в NSString. Вот результат:

Printing description of jsonString:
{"variables":
{"attachment":
{"enddate":1377475200000,
"filename":"photo.jpg",
"label":"Bhhhb ",
"file":"\/9j\/4AAQSkZJRgABAQAAAQABAAD\/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD\/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH\/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH\/wAARCAAQABADAREAAhEBAxEB\/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL\/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6\/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL\/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6\/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB\/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV\/6v4c4QxXgxhsj4wz\/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551\/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3\/AIUd8G\/i\/wDGDXPih8EfjFY+I7jwD408V\/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3\/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh\/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv\/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E\/iX4OP4fv9cvTrXhjxJ4N0u98T\/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa\/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF\/bz1v4bftB\/FX4T+Pvht8H\/AAXDqs\/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0\/IttJ2r8Q0eJpx\/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On\/9k=",
"startdate":1377475200000}
},
"function":"addattachment"}

Все косые черты (/) в исходном base64 экранированы обратной косой чертой (). Поэтому данные повреждены. Есть ли возможность сообщить JSONSerialization, чтобы не экранировать строки?

Спасибо заранее.


person Reneger    schedule 26.08.2013    source источник
comment
Я думаю, что символы экранируются только из-за того, как отладчик отображает строковые данные. По сути, вы видите данные в том виде, в каком они будут отображаться в виде строкового литерала C. Обратная косая черта, вероятно, не существует в реальных данных.   -  person Mike Weller    schedule 26.08.2013
comment
Ты прав. Я пошел дальше в отладке, я получаю действительный JSON с сервера, однако мои изображения повреждены, но я не знаю, почему. Кажется, это проблема с сервером (я ожидаю того же Base64 от сервера, что и доставил... Но это не так)   -  person Reneger    schedule 26.08.2013


Ответы (1)


Кажется, это проблема бэкэнда.

Отправлено на сервер:

/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+gb9oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsj4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwD408V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMZ1iz0W88FokSvZ3fh6+jfSePiHh/EeOEuIeJeHuHaOQcQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+Cdv/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDjR7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjkHEGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttJ2r8Q0eJpx/wjtlENX7OI+L8V4MYbPOD8g4iwOd57mNSmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=

Получено:

/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAQABADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDI/kaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMj8IFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+P79oH9pvRf29Nb+JX7Pnwq+LHj74bfB/wXDpcHirxz8Pv2fvih8d7v4tXepXepW0+irF8MVa48LeALQ6fg3Oq7V+ISPKtv8A8U7ZSnV/6v4c4QxXgxhsP4wz/hzA53nuZVKjwmWY7OMPlKyiNGLvNTr8yxOKmnD2nLG9FScaTS551/8APLjfxOyb6SGI4h8PuGuLsTw1wvlsMO8XmFHJ8RmbzdVJRnFSp2hPDUqM01Btrnkk5q7iqfUfBf43Qf8ABO3/AIUd8G/i/wDGDXPih8EfjFY+I7jwDz88V/DHxP8ACfxL8G38P3+h2S6L4n8N+MtUvfE3/CH31xrQMT9iz0W88FokSvZ3fh6+P/SePiHh/EeOEuIeJeHuHaM/cQ5U6TxmW4XHLMKebKrTjKM44mMKdFYpRUlCSjL2rgqVSatGVD0eCeN8u+jPDhjg3iPjJ8S8H55HFvLcdVy94Cpk8qFSbrqWHTnXq06tS91K3JKcpQi9VUPjR8EYP+A/v/C8vjJ8IPhBrnxQ+CPxisfDlt4+8F+FPid4m+E/iX4OP4fv9cvTrXhjxJ4N0u98T/8ACH31xrRDPx7zRbzwWiysl5d+Hr6RNIOHuIa/jhLh7hriHiOjP3EGVOqsHmWLwMcwp5tGrTlGUJ4aVSFGOKUUnOLlL2rg6tOCtKNBcbcEZd9GenxPxlw5wa+JeD88jhFmWBpZg8BUyeWHqRVFxxMoyr1adWronG3JJqM5OydXlv2fv2ZdF/bz1v4bftB/FX4T+Pvht8H/AAXDqs/hXwN8Qf2gfih8d7v4tXWo3em3MGtGX4nM1x4W8AWh0/IttD+r8Q0eJpx/wjtlENX7OD+L8V4MYbPOD8g4iwM/57k/SmsXmeCyfD5QsoVGKtBwoc6xGKmnP2fNK9HmUqqSUIVvO4I8Mcm+kfX4f8QuJeEMTw3wvlsMSsJl1fOK+ZvN1VlKEuWpeM8NSozSclb35JqLu5On/9k=

И после поиска обеих строк кажется, что в строке Base64 есть некоторые изменения, которые не могут быть разрешены на стороне клиента... Клиент ожидает: вывод == ввод.

person Reneger    schedule 26.08.2013