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使用代理抓取网站图片(多线程)
Mar 14 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
基于python实现名片管理系统
Nov 30 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python画图的函数用法以及技巧
Jun 28 Python
python 执行终端/控制台命令的例子
Jul 12 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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中的string类型使用说明
2010/07/27 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
js获取内联样式的方法
2015/01/27 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Python3安装Scrapy的方法步骤
2017/11/23 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
婴儿地球:Baby Earth
2018/12/25 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
团结演讲稿范文
2014/05/23 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
python 常用的异步框架汇总整理
2021/06/18 Python
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
一条 SQL 语句执行过程
2022/03/17 MySQL