2015-06-08 14 views
2

玩Swift我遇到了一些我不明白的東西。「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字符被認爲是「允許的」。