Как декодировать URL в iOS - Цель C
Метод stringByReplacingPercentEscapesUsingEncoding работает некорректно, так как он не декодирует специальные символы, которые не начинаются с символа%, то есть символа+. Кто-нибудь знает лучший способ сделать это в iOS?
Вот что я сейчас использую:
NSString *path = [@"path+with+spaces"
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
И вот пример вывода:
Путь + с + пространств
Ответы
Ответ 1
NSString *path = [[@"path+with+spaces"
stringByReplacingOccurrencesOfString:@"+" withString:@" "]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Обратите внимание, что подстановка "плюс-для-пространства" используется только в application/x-www-form-urlencoded
данных - часть строки запроса URL-адреса или тело запроса POST
.
Ответ 2
// Decode a percent escape encoded string.
- (NSString*) decodeFromPercentEscapeString:(NSString *) string {
return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
(__bridge CFStringRef) string,
CFSTR(""),
kCFStringEncodingUTF8);
}
http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios
Это кажется предпочтительным способом, потому что...
"Видимо" это яблоко "ошибка", но об этом еще ничего не сделали... (http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/)
Ответ 3
Если вы пытаетесь заменить знак плюса на процентные экраны, выполните замену строки с "+" на "" (одно пробел). Затем используйте stringByAddingPercentEscapesUsingEncoding:
для добавления процентных экранов.
Знак плюса - это один из многих зарезервированных URL-адресов, которые никогда не закодированы.
(stringByReplacingPercentEscapesUsingEncoding:
декодирует проценты экранов)
Ответ 4
swift 2:
extension String {
func uriDecodedString() -> String? {
return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
}
}