显然%需要编码。 wikipedia article on the standard说:
因为百分比(“%”)字符用作指示符 百分比编码的八位字节,必须将百分比编码为“%25” 八位字节用作URI中的数据。
为什么不将它列为保留字符?显然,它被保留用于表示URI上下文中的特殊内容......
答案 0 :(得分:3)
“保留”字符旨在作为URI的不同部分之间的分隔符提供。百分号不用于此 - 不能用于此 - 因为它以百分比编码使用。
它可能有助于澄清事项,指出有一个单独的“未保留”字符列表,百分号也不是其中之一:
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
(来自http://www.ietf.org/rfc/rfc3986.txt,第12页底部)。换句话说,在URI的上下文中,“保留”具有比人们预期的更具体的含义。 : - )
答案 1 :(得分:2)
百分号已通过参与语法规则pct-encoded
而保留。此外,这一段看起来很有启发性:
URI由一组有限的字符组成,这些字符由数字,字母和几个图形符号组成。这些字符的保留子集可用于界定URI中的语法组件,而其余字符(包括未保留的字符集和不用作分隔符的保留字符)定义每个组件的标识数据。
这表明百分比符号本身确实是百分比编码(因为它没有界定URI中的语法组件)。你原来的解释是正确的,我认为这只是一个语义问题。
答案 2 :(得分:2)
保留字符是在URI 中具有某些特殊含义 的字符,因此如果它们用于以外的某些内容,则需要以某种方式进行转义他们的特殊目的。
不的百分比字符在URI中具有特殊含义 - 这使得它成为转义/编码字符的理想选择。
它被用于编码的事实是百分比本身需要通过百分比编码来转义的唯一原因。
这类似于字符转义,其中反斜杠\
本身必须转义\\
,因为它是选择执行初始转义的字符,如\t
或{{1} }}