Я использую строку с urlencoded в objective-c. Есть ли функция основания, которая фактически отменяет urlENCODING?
Полученная строка похожа: K% FChlschrank, но должна быть после декодирования Kühlschrank
Я использую строку с urlencoded в objective-c. Есть ли функция основания, которая фактически отменяет urlENCODING?
Полученная строка похожа: K% FChlschrank, но должна быть после декодирования Kühlschrank
Я сделал быструю категорию, чтобы помочь решить эту проблему:)
@interface NSString (stringByDecodingURLFormat)
- (NSString *)stringByDecodingURLFormat;
@end
@implementation NSString
- (NSString *)stringByDecodingURLFormat
{
NSString *result = [(NSString *)self stringByReplacingOccurrencesOfString:@"+" withString:@" "];
result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return result;
}
@end
После определения это быстро может обрабатывать закодированную строку:
NSString *decodedString = [myString stringByDecodingURLFormat];
Множество других способов реализации.
Я считаю, что это то, что вы ищете:
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
Возвращаемое значение:
Новая строка, сделанная путем замены в приемнике всех процентов, экранирует совпадающие символы, определенные данной кодировкой. Он возвращает nil
, если преобразование невозможно, например, процентные escape-последовательности дают последовательность байтов, не легальную в кодировании.
[source: Apple NSString Class Reference]
- (NSString *)URLDecode:(NSString *)stringToDecode
{
NSString *result = [stringToDecode stringByReplacingOccurrencesOfString:@"+" withString:@" "];
result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return result;
}
Что он
Согласно W3Schools, URL-адреса можно отправлять только через Интернет, используя набор символов ASCII. Для меня этот фрагмент кода работал:
NSString *original = @"K%FChlschrank";
NSString *result2 = [original stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
Для решения parmanent на iOS 9 используйте пассивный код
NSURL* link = [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];