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中self原理实例分析
Apr 30 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
python中异常捕获方法详解
Mar 03 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
python实现定时提取实时日志程序
Jun 22 Python
详解python中递归函数
Apr 16 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
python 模块重载的五种方法
Apr 24 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php牛逼的面试题分享
2013/01/18 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
python对url格式解析的方法
2015/05/13 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
Python实现元素等待代码实例
2019/11/11 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
Python实现扫码工具的示例代码
2020/10/09 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
高中数学教师求职信
2013/10/30 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
体现团队精神的口号
2014/06/06 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL