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获取电脑硬件信息及状态的实现方法
Aug 29 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
详谈python http长连接客户端
Jun 12 Python
python实现日常记账本小程序
Mar 10 Python
TensorFlow的权值更新方法
Jun 14 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
python异常触发及自定义异常类解析
Aug 06 Python
python单例设计模式实现解析
Jan 07 Python
公认8个效率最高的爬虫框架
Jul 28 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 移除数组重复元素的一点说明
2008/11/27 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python求解平方根的方法
2015/03/11 Python
python实现排序算法解析
2018/09/08 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Django中提示消息messages的设置方式
2019/11/15 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
汽车检测与维修专业求职信
2013/10/30 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
客房部经理岗位职责
2015/02/02 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书