编码url swift withAllowedCharacters不工作 编码%20为%2520 (意味着编码%为%25)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码url swift withAllowedCharacters不工作 编码%20为%2520 (意味着编码%为%25)相关的知识,希望对你有一定的参考价值。

以下是我的URL编码代码

extension String {
var encoded: String {
    return self.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
  }
}

但我面临的问题是,如果url中包含%20,它被编码为%2520,尽管我已经添加了 urlQueryAllowed

原文网址:/mydomain.inretailers_data_v2retailer32017372-Tea%20Coffee%20Vending%20Machine.JPG https:/mydomain.inretailers_data_v2retailer32017372-Tea%20Coffee%20Vending%20Machine.JPG

编码的网址。https:/mydomain.inretailers_data_v2retailer32017372-Tea%2520Coffee%2520Vending%2520Machine.JPG。

答案

如果你有一个已经编码的URL字符串,你首先需要删除百分比编码,然后再重新应用。

如果你不确定你所拥有的URL是否已经编码,你可以简单地使用一个 if let 关于 removingPercentEncoding 并根据其结果,要么调用 addingPercentEncoding 在原始的URL上或在您删除编码的URL上。

let alreadyEncodedURLString = "https://mydomain.in/retailers_data_v2/retailer/320/17372-Tea%20Coffee%20Vending%20Machine.JPG"
if let unencodedURLString = alreadyEncodedURLString.removingPercentEncoding {
    unencodedURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
} else {
    alreadyEncodedURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
}

以上是关于编码url swift withAllowedCharacters不工作 编码%20为%2520 (意味着编码%为%25)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 protobuf 对象转换为 ByteArray 并在 Swift 中使用 Base64 URL_SAFE 进行编码?

URL编码参数中的布尔值在Swift3中使用Alamofire编码为0和1

如何在没有百分比编码的情况下在 Swift URL 中包含重音字符?

Alamofire 编码无效URL

在 Swift 3 中从 URLSession 迁移到 Alamofire 4.3,编码问题

将base64URL解码为base64 - Swift