“stringByAddingPercentEncodingWithAllowedCharacters”替换的字符多于应有的字符数

时间:2015-06-08 21:17:55

标签: swift cocoa escaping

玩Swift我遇到了一些我不理解的东西。

以下代码不仅取代了预期的/%字符,还取代了ä字符:

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取代?

1 个答案:

答案 0 :(得分:0)

该方法用于编码URL的组件或子组件。 URL中不允许使用非ASCII字符。它们总是被编码。

docs for stringByAddingPercentEncodingWithAllowedCharacters()说:

  

忽略7位ASCII范围之外的allowedCharacters中的任何字符。

也就是说,没有非ASCII字符被认为是“允许的”。