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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
Python发送http请求解析返回json的实例
Mar 26 Python
django框架自定义用户表操作示例
Aug 07 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Python的垃圾回收机制详解
Aug 28 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
python 爬取天气网卫星图片
Jun 07 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和ACCESS写聊天室(二)
2006/10/09 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php全排列递归算法代码
2012/10/09 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
javascript基本类型详解
2014/11/28 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
启动targetcli时遇到错误解决办法
2017/10/26 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python3.7调试的实例方法
2020/07/21 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
购买原创艺术品:Zatista
2019/11/09 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
高三自我鉴定
2013/10/23 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
推普标语口号大全
2015/12/26 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android