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

而此处,想要获得对应的中文内容,则需要:

  1. 先去把当前的unicode字符串转换为普通的str

    quotedStringStrType= str(quotedStringUnicodeType)

  2. 再去通过urllib.unquote去解码,得到真正的中文内容

    urlunquotedOriginalStr = urllib.unquote(quotedStringStrType);

此处的最终解码得到的字符串是UTF-8编码的。

python之urlencode(),quote()及unquote()相关推荐

  1. urlencode quote unquote (url 中带中文参数)

    目录: urlencode & quote & unquote (url 中带中文参数) python httplib urllib urllib2区别(一撇) 当url地址含有中文或 ...

  2. Python3 parse.urlencode() 与parse.unquote()

    URL编码与解码 一.parse.urlencode() 与parse.unquote() urllib 和urllib.request都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的 ...

  3. python urllib之parse中urlencode、quote、unquote使用方法

    from urllib import parse paramArr = {'type': 0, 'sex': 1} print(parse.urlencode(paramArr))paramArrSi ...

  4. python urllib.parse.quote_Python3的urllib.parse常用小结(urlencode,quote,quote_plu

    python2 与python3 导入urllib 时有差别 需要注意 按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的. 所以 ...

  5. java如何实现python的urllib.quote(str,safe='/')

    最近需要将一些python代码转成java,遇到url编码 urllib.quote(str,safe='/') 但java中URLEncoder.encode(arg, Constant.UTF_8 ...

  6. python中urllib.quote出现KeyError

    >>> urllib.quote_plus(u'江南小财主') Traceback (most recent call last):   File "<stdin&g ...

  7. Python urllib.urlencode

    有时候想把 URL 中的键值对格式化一下,以连接符 & 划分, 于是, urllib.urlencode 就派上用场了. 一.GET >>> import urllib &g ...

  8. 浅谈Python语法之quote()使用

    转自:微点阅读  https://www.weidianyuedu.com/content/1617359495208.html quote() 传入参数类型:字符串 功能:将单个字符串编码转化为 % ...

  9. 浅谈Python语言之quote()使用

    转自:微点阅读  https://www.weidianyuedu.com quote() 传入参数类型:字符串 功能:将单个字符串编码转化为 %xx 的形式 导入:from urllib.parse ...

  10. Vue项目和Tauri接入Google Analytics谷歌统计流程

    Google Analytics官网:https://analytics.google.com/ vue-gtag官网:Get started - vue-gtag 先要在Google Analyti ...

最新文章

  1. 解决 Out of range value adjusted for column 'ID' at row 1
  2. Windows——Windows恢复环境(Windows RE)
  3. 模块-from import导入所有工具
  4. 发票抬头是什么意思?
  5. python函数应用实例_【Python 第22课】 函数应用示例
  6. 在循环里创建数据库连接,严重影响数据库性能
  7. tomcat使用方法大全
  8. 一年5个孵化项目来自于中国,佛系Apache如何帮助中国开源立足全球?
  9. 去哪儿app_58款APP遭点名,多家基金、银行产品上榜!
  10. 如何卸载jdk_Java新手怎样安装JDK,手把手教你如何安装JDK
  11. 关于BS7799-3
  12. 鸿蒙系统屏幕解锁问题,鸿蒙系统解锁卡退黑屏
  13. 把linux,ssh客户端蓝色变成绿色
  14. 【Android取证篇】一键分析APK利器-APK Messenger
  15. uniapp支付打开支付宝app进行付款
  16. opcode php 缓存,PHP Opcode 缓存
  17. android 获取build,分析,读取 android build.prop
  18. java 向量存储_关于java:使用AES-256和初始化向量进行加密
  19. 解决微信群服务管理难题,只需要一个助手
  20. Android Studio——飞入文字动画演示

热门文章

  1. mysql改列名_mysql怎么修改列名
  2. 机器学习(MACHINE LEARNING)MATLAB实现层次分析法案例【AHP】
  3. 基于Proteus无实物STM32入门自学教程(三)--静态数码管
  4. Android 实现一键加QQ群,一键加QQ好友
  5. 烧结钕铁硼的居里温度与工作温度
  6. Chrome:下载Chrome网上应用店扩展程序crx
  7. 文件夹批量重命名方法
  8. uniapp 地址转换经纬度
  9. android绘制简单饼状图,Android 绘制饼状图
  10. 电脑关机同步服务器信息失败,电脑同步,更新时间失败,怎么处理?