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中的包和模块实例
Nov 22 Python
python从入门到精通(DAY 2)
Dec 20 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
python线程定时器Timer实现原理解析
Nov 30 Python
python实现两个字典合并,两个list合并
Dec 02 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
python excel和yaml文件的读取封装
Jan 12 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
python源文件的字符编码知识点详解
Mar 04 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
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
深入解析php之sphinx
2013/05/15 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
js导出txt示例代码
2014/01/14 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python 多个参数不为空校验方法
2019/02/14 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
keras的三种模型实现与区别说明
2020/07/03 Python
Python如何读写字节数据
2020/08/05 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
行政部岗位职责范本
2014/03/13 职场文书
求职个人评价范文
2014/04/09 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
学生会招新宣传语
2015/07/13 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书