2015-06-08 2 views
2

Игра со Свифт Я наткнулся на то, что я не понимаю.«stringByAddingPercentEncodingWithAllowedCharacters» заменяет больше символов, чем должно было

Следующий код заменяет не только /% символы, как предполагалось, он также заменяет ä характер:

immport Foundation 

extension String{ 
    func encode() -> String{ 
     let customAllowedSet = NSCharacterSet(charactersInString:"/%").invertedSet 
     return self.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)! 
    } 
} 

let testStr = "Ein String der % und/enthält" 
// contains what is expected 

let percentEncodedStr = testStr.encode() 
// contains "Ein String der %25 und %2F enth%C3%A4lt" 

let decodedStr = percentEncodedStr.stringByRemovingPercentEncoding 
// contains what was in testStr originally 

Почему ä заменен %C3%A4?

ответ

0

Этот метод предназначен для кодирования компонентов или подкомпонентов URL-адресов. В URL-адресах никогда не допускаются символы, отличные от ASCII. Они всегда кодируются.

docs for stringByAddingPercentEncodingWithAllowedCharacters() говорят:

Любые символы в allowedCharacters наружной части 7-битный диапазон ASCII игнорируются.

То есть, символы не-ASCII считаются «разрешенными».

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