cow*_*ert 11 python urlencode python-3.x
最近期的文件urllib中指出:
在版本3.7中更改:从RFC 2396移至RFC 3986以引用URL字符串."〜"现在包含在保留字符集中.
为什么会这样?在RFC 3986中,~不是保留字符:
Run Code Online (Sandbox Code Playgroud)reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
明确地在下一节中,它被包含为一个未保留的字符:
2.3.未保留的角色
URI中允许但没有保留目的的字符称为unreserved.这些包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号.
Run Code Online (Sandbox Code Playgroud)unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
此外,后来,RFC声明(强调我的):
例如,对应于波浪号("〜")字符的八位字节通常由较旧的 URI处理实现编码为"%7E" ;
所以看起来3.7是不一致的:它断言对新RFC的支持,同时回归处理~.(事实上,在较旧的RFC中,~也不是保留也不是' 不明智 ')
此错误已在https://bugs.python.org/issue16285中跟踪并关闭
事实上,最新版本的代码反映了这些变化。
参考https://github.com/python/cpython/blob/master/Lib/urllib/parse.py
_ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
b'abcdefghijklmnopqrstuvwxyz'
b'0123456789'
b'_.-~')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |