python之urlencode(),quote()及unquote()
URL编码、解码原因
通常如果一样东西需要编码,说明其并不适合直接传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
字符串被当作url提交时会被自动进行url编码处理,在python里也有个urllib.urlencode的方法,可以很方便的把字典形式的参数进行url编码。当url地址含有中文或者“/”的时候,这是就需要用做urlencode一下编码转换。
urlencode和quote
urlencode的参数是词典,它可以将key-value这样的键值对转换成我们想要的格式,将URL中的键值对以连接符&划分。如果你用的是python2.*,urlencode在urllib.urlencode。如果使用的是python3,urlencode在urllib.parse.urlencode。
import urllib.parse data={"name":"王尼玛","age":"/","addr":"abcdef"} print(urllib.parse.urlencode(data))
结果:
name=%E7%8E%8B%E5%B0%BC%E7%8E%9B&addr=abcdef&age=%2F
如果只想对一个字符串进行urlencode转换,使用urllib提供的另外一个函数:quote()
print(urllib.parse.quote("hahaha你好啊!"))
结果:
hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81
unquote
对url进行解码,把类似"%xx"的字符替换成单个字符,当urlencode之后的字符串传递过来之后,接收完毕解码使用urllib提供的unquote()函数,注意没有urldecode()!若unquote方法接收到的参数类型是unicode,则返回的值类型也是unicode,只不过是把"%"替换成了’\x’,明智的做法是使用str()转换一下再用
import urllib.parse data={"name":"王尼玛","age":"/","addr":"abcdef"} print(urllib.parse.urlencode(data))print(urllib.parse.unquote("name=%E7%8E%8B%E5%B0%BC%E7%8E%9B&addr=abcdef&age=%2F")) print(urllib.parse.quote("hahaha你好啊!")) print(urllib.parse.unquote("hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81"))
结果:
name=%E7%8E%8B%E5%B0%BC%E7%8E%9B&addr=abcdef&age=%2F
name=王尼玛&addr=abcdef&age=/
hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81
hahaha你好啊!
在做解码的时候,看unquote()这个函数的输出,是对应中文在gbk下的编码,在对比一下quote()的结果不难发现,所谓的解码就是把字符串转成gbk编码,然后把\x替换成%。如果你的终端是utf8编码的,那么要把结果再转成utf8输出,否则就乱码。
可以根据实际情况,自定义或者重写urlencode()、urldecode()等函数。
注意:
如果是已经获得了Unicode类型的字符串,字符串内容是,quote过的,带百分号%的,比如:
%E8%BD%AC%E5%8F%91%E5%BE%AE%E5%8D%9A
而此处,想要获得对应的中文内容,则需要:
先去把当前的unicode字符串转换为普通的str
quotedStringStrType= str(quotedStringUnicodeType)
再去通过urllib.unquote去解码,得到真正的中文内容
urlunquotedOriginalStr = urllib.unquote(quotedStringStrType);
此处的最终解码得到的字符串是UTF-8编码的。
python之urlencode(),quote()及unquote()相关推荐
- urlencode quote unquote (url 中带中文参数)
目录: urlencode & quote & unquote (url 中带中文参数) python httplib urllib urllib2区别(一撇) 当url地址含有中文或 ...
- Python3 parse.urlencode() 与parse.unquote()
URL编码与解码 一.parse.urlencode() 与parse.unquote() urllib 和urllib.request都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的 ...
- python urllib之parse中urlencode、quote、unquote使用方法
from urllib import parse paramArr = {'type': 0, 'sex': 1} print(parse.urlencode(paramArr))paramArrSi ...
- python urllib.parse.quote_Python3的urllib.parse常用小结(urlencode,quote,quote_plu
python2 与python3 导入urllib 时有差别 需要注意 按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的. 所以 ...
- java如何实现python的urllib.quote(str,safe='/')
最近需要将一些python代码转成java,遇到url编码 urllib.quote(str,safe='/') 但java中URLEncoder.encode(arg, Constant.UTF_8 ...
- python中urllib.quote出现KeyError
>>> urllib.quote_plus(u'江南小财主') Traceback (most recent call last): File "<stdin&g ...
- Python urllib.urlencode
有时候想把 URL 中的键值对格式化一下,以连接符 & 划分, 于是, urllib.urlencode 就派上用场了. 一.GET >>> import urllib &g ...
- 浅谈Python语法之quote()使用
转自:微点阅读 https://www.weidianyuedu.com/content/1617359495208.html quote() 传入参数类型:字符串 功能:将单个字符串编码转化为 % ...
- 浅谈Python语言之quote()使用
转自:微点阅读 https://www.weidianyuedu.com quote() 传入参数类型:字符串 功能:将单个字符串编码转化为 %xx 的形式 导入:from urllib.parse ...
- Vue项目和Tauri接入Google Analytics谷歌统计流程
Google Analytics官网:https://analytics.google.com/ vue-gtag官网:Get started - vue-gtag 先要在Google Analyti ...
最新文章
- 解决 Out of range value adjusted for column 'ID' at row 1
- Windows——Windows恢复环境(Windows RE)
- 模块-from import导入所有工具
- 发票抬头是什么意思?
- python函数应用实例_【Python 第22课】 函数应用示例
- 在循环里创建数据库连接,严重影响数据库性能
- tomcat使用方法大全
- 一年5个孵化项目来自于中国,佛系Apache如何帮助中国开源立足全球?
- 去哪儿app_58款APP遭点名,多家基金、银行产品上榜!
- 如何卸载jdk_Java新手怎样安装JDK,手把手教你如何安装JDK
- 关于BS7799-3
- 鸿蒙系统屏幕解锁问题,鸿蒙系统解锁卡退黑屏
- 把linux,ssh客户端蓝色变成绿色
- 【Android取证篇】一键分析APK利器-APK Messenger
- uniapp支付打开支付宝app进行付款
- opcode php 缓存,PHP Opcode 缓存
- android 获取build,分析,读取 android build.prop
- java 向量存储_关于java:使用AES-256和初始化向量进行加密
- 解决微信群服务管理难题,只需要一个助手
- Android Studio——飞入文字动画演示