@ Янник, ты был на правильном пути, спасибо. stringByAddingPercentEscapesUsingEncoding работает, но игнорирует некоторые символы, которые все еще могут быть проблемой (например, косая черта). Вот лучший способ сделать кодировку URL:
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)unencodedString,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
kCFStringEncodingUTF8 );