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之网站的结构
Oct 24 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
python实现图片文件批量重命名
Mar 23 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
python 获取等间隔的数组实例
Jul 04 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Django配置跨域并开发测试接口
Nov 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判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
DOM 基本方法
2009/07/18 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
js实现select下拉框选择
2020/01/11 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
python散点图实例之随机漫步
2018/08/27 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
python redis存入字典序列化存储教程
2020/07/16 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
教师实习自我鉴定
2013/12/11 职场文书
综合办公室主任职责
2013/12/16 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis