iOS中的URL解码

我正在使用Swift 1.2开发我的iPhone应用程序,我正在与一个http网络服务进行通信。

我得到的响应是查询字符串格式(键值对)和.Net编码的URL。

我可以得到响应,但查找使用Swift进行解码的正确方法。

样品响应如下

 status=1&message=The+transaction+for+GBP+12.50+was+successful 

尝试以下方式解码并获取服务器响应

 // This provides encoded response String var responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as! String var decodedResponse = responseString.stringByReplacingEscapesUsingEncoding(NSUTF8StringEncoding)! 

如何替换字符串中的所有URL转义字符?

要对URL进行编码和解码,请在项目中的某处创建此扩展:

Swift 2.0

 extension String { func encodeUrl() -> String { return self.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet()) } func decodeUrl() -> String { return self.stringByRemovingPercentEncoding } } 

Swift 3.0

  extension String { func encodeUrl() -> String { return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed()) } func decodeUrl() -> String { return self.removingPercentEncoding } } 

Swift 4.1

 extension String { func encodeUrl() -> String? { return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed) } func decodeUrl() -> String? { return self.removingPercentEncoding } } 

Swift 2及更高版本(xCode 7)

 var s = "aa bb -[:/?&=;+!@#$()',*]"; let sEncode = s.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) let sDecode = sEncode?.stringByRemovingPercentEncoding 

stringByReplacingEscapesUsingEncoding方法表现正常。 "+"字符不是百分比编码的一部分 。 此服务器使用不正确; 它应该在这里使用百分比转义空间( %20 )。 如果对于特定的响应,您希望空格中看到"+"字符,则只需通过自己执行替换来解决服务器行为,就像您现在所做的那样。

在我的情况下,我需要在查询字符串的参数中的电话号码中添加加号(“+”)信号,例如“+55 11 99999-5555”。 在我发现swift3(xcode 8.2)编码器不将“+”编码为加号信号,但是空格后,我不得不在编码后采用一种解决方法:

Swift 3.0

 _strURL = _strURL.replacingOccurrences(of: "+", with: "%2B") 

在Swift 3中

 extension URL { var parseQueryString: [String: String] { var results = [String: String]() if let pairs = self.query?.components(separatedBy: "&"), pairs.count > 0 { for pair: String in pairs { if let keyValue = pair.components(separatedBy: "=") as [String]? { results.updateValue(keyValue[1], forKey: keyValue[0]) } } } return results } } 

在您的代码中访问下面

 let parse = url.parseQueryString print("parse \(parse)" )