2015-09-17 1 views
1

Как и в случае Swift2stringByAddingPercentEscapesUsingEncoding() устарел вместо stringByAddingPercentEncodingWithAllowedCharacters().Как кодировать специальный символ типа '(NSWindowsCP1250StringEncoding) в Swift2

Но как кодировать особенный характер, как '% & в swift2

Например, в iOS8 (swift1.2) я использовал следующий код для кодирования

NSURL(string: "myurl.php?deviceName=name’phone".stringByAddingPercentEscapesUsingEncoding(NSWindowsCP1250StringEncoding)!) 

это прекрасно работает т.е. на сервере он правильно декодировать.

Но в iOS9 (Swift2.0) я использовал следующий код

NSURL(string: "myurl.php?deviceName=name ’phone".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())!) 

Он не будет распознаваться должным образом.
скажите, пожалуйста, как я могу кодировать специальный charater в swift2.0?

EDIT: Eric D ответ правильный, но когда я закодировать ниже stringURL не будет кодировать должным образом. Почему?

let stringURL = "https://my.server.com/login.php?e=email&dn=my’s iPad&d=5&er=D550772E-34BB-4DCB-89C9-E746FAD83D24&tz=330" 
     print(stringURL) 
     let charSet = NSCharacterSet.URLPathAllowedCharacterSet() 
     let encoded = stringURL.stringByAddingPercentEncodingWithAllowedCharacters(charSet)! 

     let url = NSURL(string: encoded.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())!)! 

     print(url) //https%253A//my.server.com/login.php%253Fe=email&dn=my%25E2%2580%2599s%2520iPad&d=5&er=D550772E-34BB-4DCB-89C9-E746FAD83D ... 4&tz=330 

EDIT 2:

Как кодировать NSWindowsCP1250StringEncoding в swift2.0?

+0

попробовать 'URLQueryAllowedCharacterSet()', так как специальные символы произойти в 'query' части URL – vadian

+0

@ vadian он не будет работать. в сервере я получил ответ, как myName's iPhone –

+0

URLQueryAllowedCharacterSet() не работает –

ответ

1

Использование URLPathAllowedCharacterSet() в качестве набора символов:

let stringURL = "myurl.php?deviceName=name'phone" 
let charSet = NSCharacterSet.URLPathAllowedCharacterSet() 
let encoded = stringURL.stringByAddingPercentEncodingWithAllowedCharacters(charSet)! 
let url = NSURL(string: encoded)! 

print(url) // "myurl.php%3FdeviceName=name'phone" 

Обратите внимание, что ' не должен быть закодирован, это действительный URL характер.

Update: в комментариях вы утверждаете, что она по-прежнему не работает, потому что ваш кодированный URL усечен и содержит ..., но на самом деле это, вероятно, будет просто печататься описание усечена NSURL; фактический URL-адрес, содержащий объект NSURL, должен быть в порядке. В противном случае это будет ноль. Вы должны проверить на своей стороне сервера проблемы с очень длинными, но правильными URL-адресами.

+0

please se my edit question –

+0

Что заставляет вас сказать, что он все еще не закодирован должным образом? Возможно, вам захочется добавить более подробную информацию и контекст о том, что вы ожидаете, и почему это отличается от того, что происходит. Спасибо. – Moritz

+0

в моем вопросе редактирования, когда я кодирую большую строку, он будет кодировать .... после некоторого символа. так же, как это //https%253A//my.server.com/login.php%253Fe=email&dn=my%25E2%2580%2599s%2520iPad&d=5&er=D550772E-34BB-4DCB-89C9-E746FAD83D ...4 & tz = 330 –

0
let newURLEncodedString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 
+0

Я проверяю, что это не будет работать для специального символа. на стороне сервера он будет декодироваться, как myName's iPhone –

+0

Мне нужно кодировать «этот символ –

 Смежные вопросы

  • Нет связанных вопросов^_^