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 网络编程起步(Socket发送消息)
Sep 06 Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
Python实现约瑟夫环问题的方法
May 03 Python
Django卸载之后重新安装的方法
Mar 15 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python常见数字运算操作实例小结
Mar 22 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
python实现飞船大战
Apr 24 Python
Python3合并两个有序数组代码实例
Aug 11 Python
Python实现Hash算法
Mar 18 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
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
js调用css属性写法
2013/09/21 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python常用的json标准库
2019/02/19 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
Python学习之os模块及用法
2020/06/03 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
解决方案设计综合面试题
2015/08/31 面试题
abstract class和interface有什么区别
2013/08/04 面试题
模具设计与制造专业推荐信
2014/02/16 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
布达拉宫的导游词
2015/02/02 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书