Я закодировал строку изображения base64 с помощью CFURLCreateStringByAddingPercentEscapes:
(__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)imageString, NULL,CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding))
Это работает. Но теперь, когда CFURLCreateStringByAddingPercentEscapes устарел, и рекомендуется использовать stringByAddingPercentEncodingWithAllowedCharacters, я не уверен, какой разрешенный набор символов использовать. Я пробовал каждый из следующих наборов с указанными выше символами, но ни один из них не работает:
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end
Любая помощь приветствуется!
И строка base64 не должна нуждаться в переходах от процентов.
Нет, я не помещал его в URL-адрес, я помещал его в тело http с помощью setHTTPBody.
Я также установил заголовок, например: [request setValue: self.authorization forHTTPHeaderField: @ "Authorization"]; [запрос addValue: @ "application / x-www-form-urlencoded" forHTTPHeaderField: @ "Content-Type"]; [запрос addValue: @ "application / octet-stream" forHTTPHeaderField: @ "Content-Type"]; [запрос addValue: @ "base64" forHTTPHeaderField: @ "Content-Transfer-Encoding"];
Я сделал такую кодировку: stackoverflow.com/questions/10524323/…
В конце концов я добился этого, удалив определенные символы, а не добавив их: [charSet formUnionWithCharacterSet: [NSCharacterSet URLPathAllowedCharacterSet]]; [charSet removeCharactersInString: @ ": /? # [] @! $ & '() * +,; = \" <>% {} | \\ ^ ~ `"];
Вы загружаете изображение, помещая данные в URL-адрес? Поскольку это плохая идея, вы должны поместить его в тело, чтобы вам не нужно было экранировать URL-адрес.