python 学习之编码解码

本文介绍了Python中encode()和decode()函数的作用,以及URL编码的规则和urllib.parse模块在URL解析、编码和解码中的应用。重点讲解了如何使用urllib.parse.urlencode(), quote(), unquote(), quote_plus()和unquote_plus()处理特殊字符和参数传递。

编码与解码


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.youkuaiyun.com/Wjf7496/article/details/109787586
    
  • URL quoting(URL引用)

    参考:https://blog.youkuaiyun.com/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’; 空格为‘ ’编码为‘+’ 等等
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值