Краткий ответ:
Ваш urlstring
содержит мягкие дефисы.
Полный ответ:
В следующем коде withSoftHyphens
и withoutSoftHyphens
выглядят одинаково:
NSString *withSoftHyphens = @"example/example/example";
NSString *withoutSoftHyphens = @"example/example/example";
NSLog(@"%@",[withSoftHyphens stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);
NSLog(@"%@",[withoutSoftHyphens stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);
Однако вывод отличается:
(проверьте себя, скопировав и выполнив приведенный выше код)
"example/%C2%ADexample/%C2%ADexample"
"example/example/example"
Мягкие дефисы в основном представлены %C2%AD
после кодирования строки.
Цитата из Википедии:
Мягкий дефис - это тип используемого дефисауказать место в тексте, где допускается разрыв через дефис без принудительного разрыва строки в неудобном месте, если текст перетекает.
Другими словами, ваш urlstring
содержит мягкие дефисы.
Просто удалите /g
и /f
, используя клавишу Backspace, и введите их снова.
Обратите внимание, что на самом деле вам нужно ТРИ Backspace, чтобы удалить только два символа (/g
).
- Первый Backspace удаляетg
.
- Второй забой удаляет невидимый мягкийt дефис.
- Третье возвращение удаляет /
.
В заключение, ваш код работает очень хорошо после удаления мягких дефисов:
NSString *username = @"Anne";
NSString *userpass = @"Password";
NSString *urlstring = [NSString stringWithFormat:@"https://%@:%@@gmail.google.com/mail/feed/atom", username, userpass];
NSString *encodedString = [urlstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:encodedString];
NSLog(@"%@", url);
Вывод:
https://Anne:Password@gmail.google.com/mail/feed/atom