Python使用urllib模块对URL网址中的中文编码与解码实例详解


Posted in Python onFebruary 18, 2020

URL网址链接中的中文编码说明

中文的gbk(GB2312)编码: 一个汉字对应两组%xx,即%xx%xx

中文的UTF-8编码: 一个汉字对应三组%xx,即%xx%xx%xx

可以利用百度进行URL编码解码 默认gbk

https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD

python3编码解码示例

# -*- coding: utf-8 -*-

# @File  : urldecode_demo.py
# @Date  : 2018-05-11

from urllib.request import quote, unquote

# 编码

url1 = "https://www.baidu.com/s?wd=中国"

# utf8编码,指定安全字符
ret1 = quote(url1, safe=";/?:@&=+$,", encoding="utf-8")
print(ret1)
# https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD

# gbk编码
ret2 = quote(url1, encoding="gbk")
print(ret2)
# https%3A//www.baidu.com/s%3Fwd%3D%D6%D0%B9%FA


# 解码
url3 = "https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD"

ret3 = unquote(url3, encoding='utf-8')
print(ret3)
# https://www.baidu.com/s?wd=中国

实例中我们使用到了urllib模块和urllib.unquote()函数

import urllib
rawurl=xxx
url=urllib.unquote(rawurl)

所用模块:urllib

所用函数:urllib.unquote()

案例

import urllib
rawurl = "%E6%B2%B3%E6%BA%90"
url = urllib.unquote(rawurl)
print url

输出

河源

urllib.unquote()目的是对url编码进行解码,与该函数对应的是编码函数urllib.quote()

>>> import urllib
>>> urllib.quote("河源")
'%E6%B2%B3%E6%BA%90

问题扩展

URL为何要编码、解码?

通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。

例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。

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

更多关于Python使用urllib模块对URL编码与解码实例请查看下面的相关链接

Python 相关文章推荐
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
python自带的http模块详解
Nov 06 Python
node.js获取参数的常用方法(总结)
May 29 Python
5款非常棒的Python工具
Jan 05 Python
Django权限机制实现代码详解
Feb 05 Python
python绘制立方体的方法
Jul 02 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
Django Rest framework之认证的实现代码
Dec 17 Python
python实现翻译word表格小程序
Feb 27 Python
Python的collections模块真的很好用
Mar 01 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 #Python
python有序查找算法 二分法实例解析
Feb 18 #Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 #Python
Python 解析pymysql模块操作数据库的方法
Feb 18 #Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 #Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 #Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 #Python
You might like
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
Python计算字符宽度的方法
2016/06/14 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
机械工程师求职自我评价
2013/09/23 职场文书
初中同学聚会感言
2014/02/11 职场文书
美术指导求职信
2014/03/17 职场文书
战友聚会主持词
2014/04/02 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
2015新学期开学寄语
2015/02/26 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技