iOS中的URL解码

Jib*_*ibW 32 urldecode ios swift

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

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

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

样品响应如下

status=1&message=The+transaction+for+GBP+12.50+was+successful
Run Code Online (Sandbox Code Playgroud)

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

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

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

Vya*_*lav 73

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

Swift 2.0

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

}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

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

    }
Run Code Online (Sandbox Code Playgroud)

Swift 4.1

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

  • 这是非常不正确的.字符集常量不是为了编码URL,因此您不能使用任何预定义的集来编码URL.你必须创建一个新的.例如,您的代码不会正确编码`&`和`=`.解码将工作. (2认同)

Sco*_*des 9

您只需要:

print("Decode: ", yourUrlAsString.removingPercentEncoding) 
Run Code Online (Sandbox Code Playgroud)


小智 8

Swift 2及更高版本(xCode 7)

var s = "aa bb -[:/?&=;+!@#$()',*]";

let sEncode = s.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

let sDecode = sEncode?.stringByRemovingPercentEncoding
Run Code Online (Sandbox Code Playgroud)


mat*_*att 6

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

  • 嗨,matt,是的,我知道服务器使用 + 而不是 %20 来表示响应中的空间(编码的查询字符串响应)... Java 处理这种情况并正确解码“URLDecoder.decode(responseString, "UTF-8"); “...我在我的问题中添加了我的临时方式使其在编辑下工作,但是查看是否有任何直接的语言 API 方法可用于正确解码,而不是我在执行 stringByReplacingEscapesUsingEncoding 之前用空格替换 + ......你是说如果这种方法在 SWIFT 中不可用? (2认同)