# python3 urlencode 和 urldecode

## 故事背景

当我们在浏览器搜索内容时会发现浏览器会自动的将我们输入的内容转化为带有 很多`%` 的地址如下所示:

> https://www.baidu.com/s?wd=%E4%B8%BA%E4%BB%80%E4%B9%88&rsv_spt=1&rsv_iqid=0xeaa7d7410002e421&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=9&rsv_sug1=11&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&prefixsug=%25E4%25B8%25BA%25E4%25BB%2580%25E4%25B9%2588&rsp=5&inputT=2965&rsv_sug4=3444

那么为什么浏览器要这么做?这么做有什么用?

## 原因解析

在了解上面的问题前我们需要先搞清楚 URI、URL、以及URN

### 什么是URI、URL、URN

- URI(Uniform Resource Identifier:统一资源标识符): 用一个紧凑的字符串来表示抽象或物理资源。URI 只是规定如何摆哦是资源但是没有规定如何获取资源。

- URL(Uniform Resource Locator:统一资源定位符):URL是URI最常见的表现形式,它明确说明如何从一个精准、固定的位置获取资源。URL不但规定了如何标识资源同时还规定了如何获取资源

大部分URL都遵循一种标准格式这种格式包含三个部分:

- URL第一部分称为方案(scheme),说明访问资源所使用的协议类型,这部分通常就是 HTTP 协议(http://)

- 第二部分给出服务器的因特网地址 eg: www.taobao.com

- 其余部分指定了Web服务器上某个资源 eg: /robots.txt

- URN(Uniform Resource Name:统一资源名称):URN作为特定内容的唯一名称使用与目前的资源所在地无关,使用这些这些位置无关的URN就可以将资源到处搬迁

- 三者关系如图所示:

![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CucrwG90-1605039867773)(/Users/wollens/Library/Application Support/typora-user-images/image-20201111040232725.png)\]](https://img-blog.csdnimg.cn/20201111042525655.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RhbmllbEphY2ta,size_16,color_FFFFFF,t_70#pic_center)

### 为什么浏览器要将我们输入内容转义

根据上面的内容我们了解到 URL 是资源定符,在URL中有些参数字符串是使用ke y=value 键值对的形式传参键值对之间使用 `&` 符号分隔。

假设如果你的value中包含有 = 或者 &,那么将会导致接收URL的服务器解析错误导致无法获取正确的资源,因此必须将引起歧义的 & 和 = 符号进行转义也就是对其进行编码。

又或者 URL 的编码格式采用 ASCII 码,而不是unicode,这也是就是说你不能在URL中包含任何非ASCII 字符,例如中文,否则如果客户端浏览器和服务端浏览器支持的字符集不同中文可能会造成问题。

类似以上的情况还有很多场景这里就不一一举例,为了避免上述问题浏览器默认对我们URL进行转义。

### python urlencode 和 urldecode 的使用

在 python3 中将中文进行 urlencode urldecode 编码需要使用 urllib 这个库

- urlencode

```python

import urllib

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

```

- urldecode

```python

import urllib

urllib.parse.unquote(string, encoding='utf-8', error='replace')

```

- 使用实例

```python

import urllib

urllib.parse.quote('打工人')

>>> '%E6%89%93%E5%B7%A5%E4%BA%BA'

urllib.parse.unquote('%E6%89%93%E5%B7%A5%E4%BA%BA')

>>> '打工人'

```

python3 url decode_python3 urlencode 和 urldecode 使用相关推荐

  1. python3 urlencode及urldecode

    摘要:code过程中有将urlencode及urldecode的需求,接下来介绍在python3中如何将urlencode及urldecode 函数 urlencode: urllib.parse.q ...

  2. php url编码原理,urlencode编码/urldecode解码作用及使用方法

    urlencode和urldecode释义 urlencode是一个函数,可将字符串以URL编码,用于编码处理. URL编码(URL encoding),也称作百分号编码(Percent-encodi ...

  3. JS javascript实现url编码和url解码(urlEncode urlDecode)

    本文转自:JS javascript实现url编码和url解码(urlEncode urlDecode)  转载请保留. 表单通过get方式提交中文数据时,提交的中文会被转化为类似"%CC% ...

  4. linux url解码工具,Linux C语言实现urlencode和urldecode

    本文主要记录一下urlencode和urldecode的C语言实现,作为一个简易工具使用. 1. urlencode编码的基本规则 URL编码做了如下操作: 字符"a"-" ...

  5. PHP中的urlencode和urldecode

    使用urlencode()函数编码中文字符实质上就是把字符转换为十六进制再在第个字符左边加上一个特殊的标识符% urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL ...

  6. urlencode 与urldecode 函数字符编码原理详解

    中文字符编码研究系列第五期,详解 urlencode()与urldecode()函数字符编码原理,两个函数分别用于编码 URL 字符串和解码已编码的 URL 字符串,实现对中文字符的编码 <if ...

  7. Python 中的 urlencode 和 urldecode 操作

    Web  编程中由于需要用 Form 或 URL 来传递参数,所以必然会有 urlencode 和 urldecode 的操作,Python Web 也不例外.Python 对 URL 的编解码操作提 ...

  8. html5 url有什么作用,urldecode 作用

    请问urlencode和urldecode有什么必要性? .NET里Server.URLEncode和Server.URLDecode到底是.NET里Server.URLEncode和Server.U ...

  9. HTMlEncode和HTMLDecode、UrlEncode和 UrlDecode 定义和用法

    HTMlEncode和HTMLDecode 1.HTMLEncode函数:除了server.htmlencode的所有功能以外,还有转化回车和空格的功能,可以将textarea中输入的文本按照原样在h ...

最新文章

  1. 在AI人工智能时代,大学或需要重新定位
  2. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)
  4. jquery绑定元素id事件_JQuery绑定click事件的3种写法
  5. IntelliJ IDEA for Mac 修改项目模块的名称
  6. java线程interrupt用法_Java线程中interrupt那点事 | 学步园
  7. 论文浅尝 | 动态知识图谱对齐
  8. 第三届“信息论与编码”中大论坛诚邀您的参加
  9. Java设计模式(二) 观察者模式
  10. python办公室应用_Python干货:玩转办公室软件(一)PP还能这样玩!
  11. 剑指 Offer II 042. 最近请求次数【队列方法】
  12. Thinking in Java之匿名内部类
  13. python 下标 遍历列表_Python中遍历列表中元素的操作
  14. QT--编写自己的TCP/IP上位机软件--demo
  15. 浙江行游14---千岛湖,清凉的世界里
  16. Smart Thief 问题
  17. springboot整合apache ftpserver详细教程(看这一篇就够了)
  18. Spark REPL
  19. Photoshop保存图片时闪退
  20. 实现类似淘票票电影滑动选择的效果

热门文章

  1. 网页制作表单代码java_JSP动态网页入门:表单输入例子
  2. java求面积_用Java做个计算长方形面积的程序(3)
  3. 三层别墅还有地下室,如何做到网络和Wi-Fi全覆盖?
  4. Elasticsearch 7.x修改/忘记密码
  5. 【机器学习】交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图
  6. Jquery之显示/隐藏元素
  7. 读书笔记——计算机科学导论
  8. 什么是泛型?为什么需要泛型?杠精泛型
  9. adb与模拟器连接(mumu)
  10. Deepdive原理