我有两个字符串的间距编码不同:
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.我怎样才能正确地解码他们两个,无论我收到哪一个?
2条答案
按热度按时间8ulbf1ek1#
除了参与实现
CFURLCreateStringByReplacingPercentEscapes
的人之外,“为什么”是一个很难回答的问题,事实是它没有参与。我可以推测它不会,因为用于空间替换的
+
不是RFC 3986: Uniform Resource Identifier (URI): Generic Syntax的一部分,它应该只在URL的查询部分使用,URL的类型是application/x-www-form-urlencoded
,但这只是我的猜测。无论如何,如果要将
+
转换为空格,应该在执行percent解码之前进行,以免将%2b
解码为+
,然后进一步将其解码为空格,从而使URL在解码后无法包含真正的+
。ffdz8vbo2#
如果你可以从两种不同的模式中解码一个空白,那么当你想做相反的事情并编码它时,它应该采取哪一种模式?
这就是
removingPercentEncoding
只支持其中一个的原因。