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 相关文章推荐
python3抓取中文网页的方法
Jul 28 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
python队列Queue的详解
May 10 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
Python实现自动装机功能案例分析
Oct 22 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 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实现简单的新闻发布系统实例
2015/07/28 PHP
WordPress网站性能优化指南
2015/11/18 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
[00:10]神之谴戒
2019/03/06 DOTA
值得收藏的10道python 面试题
2019/04/15 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python的re模块使用方法详解
2019/07/26 Python
pytorch之添加BN的实现
2020/01/06 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
应届毕业生求职自荐书
2014/01/03 职场文书
投资入股合作协议书
2014/10/28 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
太行山上观后感
2015/06/05 职场文书
话题作文之学会尊重
2019/12/16 职场文书
i7 6700处理器相当于i5几代
2022/04/19 数码科技
nginx配置指令之server_name的具体使用
2022/08/14 Servers