ios 为什么removingPercentEncoding()不像用%20那样替换'+'?

rbl8hiat  于 2023-02-26  发布在  iOS
关注(0)|答案(2)|浏览(203)

我有两个字符串的间距编码不同:

let first = "https://joytst.page.link/zMx3nAj9DxwcE1JC9?title=New+calendar+test"
let second = "https://joytst.page.link/zMx3nAj9DxwcE1JC9?title=New%20calendar%20test"

let firstOutput = first.removingPercentEncoding //https://joytst.page.link/zMx3nAj9DxwcE1JC9?title=New+calendar+test
let secondOutput = second.removingPercentEncoding //https://joytst.page.link/zMx3nAj9DxwcE1JC9?title=New calendar test

1.既然+是空格的正确编码,为什么它不能正确地删除编码?
1.我怎样才能正确地解码他们两个,无论我收到哪一个?

8ulbf1ek

8ulbf1ek1#

除了参与实现CFURLCreateStringByReplacingPercentEscapes的人之外,“为什么”是一个很难回答的问题,事实是它没有参与。
我可以推测它不会,因为用于空间替换的+不是RFC 3986: Uniform Resource Identifier (URI): Generic Syntax的一部分,它应该只在URL的查询部分使用,URL的类型是application/x-www-form-urlencoded,但这只是我的猜测。
无论如何,如果要将+转换为空格,应该在执行percent解码之前进行,以免将%2b解码为+,然后进一步将其解码为空格,从而使URL在解码后无法包含真正的+

let firstOutput = first
    .replacingOccurrences(of: "+", with: " ")
    .removingPercentEncoding
ffdz8vbo

ffdz8vbo2#

如果你可以从两种不同的模式中解码一个空白,那么当你想做相反的事情并编码它时,它应该采取哪一种模式?
这就是removingPercentEncoding只支持其中一个的原因。

相关问题