python 学习之编码解码

python 学习之编码解码,第1张

python 学习之编码解码
编码与解码

encode()和decode()
  • decode英文意思是 解码,encode英文原意 编码
  • 字符串在Python内部的表示是unicode编码, 因此,在做编码转换时,通常需要以unicode作为中间编码
  • decode()的作用是将其他编码的字符串转换成unicode编码
  • encode()的作用是将unicode编码转换成其他编码的字符串
[详情参考](python中的encode()和decode()函数 - 年轻人——001 - 博客园 (cnblogs.com))
url编码

Url编码通常也被称为百分号编码,在Http协议中参数的传输是**“key=value"这种字典形式的,如果要传多个参数就需要用“&”**符号对键值对进行分割。如”?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。

​ 对于Url中的不引起歧义的字符,编码和不编码是等价的,但是对于上面提到的这些字符,如果不经过编码,那么它们有可能会造成Url语义的不同。因此对于Url而言,只有普通英文字符和数字,特殊字符 $-.+!*’() 还有保留字符,才能出现在未经编码的Url之中。

歧义字符:

  • 空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
  • 空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
  • #:通常用于表示书签或者锚点
  • %:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
  • %:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码

​ URL编码在特殊字符的各个字节前加 % 后,服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。

如对url编码感兴趣,[参考](为什么要进行URL编码 - 降瑞雪 - 博客园 (cnblogs.com))


parse模块

parse 模块用于解析URL,支持对URL的 *** 作包括拆分、拼接、编码、解码

  • 解析URL,支持对URL的 *** 作包括拆分、拼接、编码、解码等

  • URL parsing(URL解析)

    参考:https://blog.csdn.net/Wjf7496/article/details/109787586
    
  • URL quoting(URL引用)

    参考:https://blog.csdn.net/Wjf7496/article/details/109813106
    
常见函数:
  • urllib.parse.urlencode 将字典中key:value转换为key=编码后的value
  • urllib.parse.quote将str数据转换为对应编码
  • urllib.parse.unquote将编码后的数据转换为编码前数据
  • 获取url参数;parse.urlparse(url)
urlparse参考

urllib.parse.urlparse(urlstring, scheme=’’, allow_fragments=True)
urlparse()函数用来解析url,返回一个包含以下这六个元素的属性

属性索引值scheme (协议)0URL方案说明符netloc (域名)1网络位置部分path (路径)2分层路径params (路径参数)3最后一个路径元素的参数query (查询参数)4查询组件fragment (片段)5片段识别
parseResult = parse.urlparse(url)
#返回元组
(scheme='https', netloc='docs.python.org', path='/3.5/search.html', params='', query='q=parse&check_keywords=yes&area=default', fragment='')

param_dict=parse.parse_qs(parseResult.query)

{'q': ['parse'], 'check_keywords': ['yes'], 'area': ['default']}

param_dict['q'][0]
'parse'
#注意:加号会被解码,可能有时并不是我们想要的
  • parse_qs()/parse_qsl()

分析url中query字段 该字段通过parse.urlsplit(url).query得到str类型的query字符串

urllib.parse.parse_qs():
	返回字典 其中value是一个列表,保存url中query中相同key的所有value值
	因此获取真正的value值还需要列表下标遍历 如query[key][0]
	
urllib.parse.parse_qsl()
	返回列表  列表的每一个元素是一个仅含两个元素的元组
	每个元组的第一个元素为dict的key,第二个元素为dict的value
	
  • urllib.parse.quote_plus 是在quote基础上强化了,

    会编码 斜线为‘%2F’; 空格为‘ ’编码为‘+’ 等等
    
  • urllib.parse.unquote_plus() 是在unquote基础上强化了
会解码 斜线为‘%2F’; 空格为‘ ’编码为‘+’ 等等

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4830152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-10
下一篇 2022-11-10

发表评论

登录后才能评论

评论列表(0条)

保存