stringByAddingPercentEncodingWithAllowedCharacters对空格的行为很奇怪

时间:2016-02-16 11:46:31

标签: ios swift

我正在尝试在Swift中执行一个安全的HTTP请求,但是一旦我尝试使用{}的空格来转义一个字符串(为什么这个函数名这么久,认真),它似乎添加了很多空格和一些类似十六进制的表示法:

stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

老实说,我无法理解正在发生的事情

修改

我的代码是:

"abc"   -> "abc"                       (Looks fine)
"abc "  -> "abc2                       (No closing quotes?)
"abc a" -> "abc              0x0p+0"   (?!)

这就是所谓的

func getLocations(query: String) -> String {
    let safeQuery = query.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
    NSLog("query: \(query) -> \(safeQuery)")
}

其中textField是视图中的文本字段。

1 个答案:

答案 0 :(得分:3)

这是因为你使用了NSLog。

有了这个:

NSLog("query: \(query) -> \(safeQuery)")

你明白了:

  

查询:abc a - > abc 0x0p + 0

因为你正在使用NSLog和Swift的字符串插值。这不行。

使用NSLog自己的插值系统,其中每个%@将被提供的项目替换,按顺序排列:

NSLog("query: %@ -> %@", query, safeQuery)

打印:

  

查询:abc a - > ABC%20A