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进程管理工具supervisor使用实例
Sep 17 Python
视觉直观感受若干常用排序算法
Apr 13 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
举例讲解Python常用模块
Mar 08 Python
Python pandas用法最全整理
Aug 04 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
Python模块相关知识点小结
Mar 09 Python
python 如何在测试中使用 Mock
Mar 01 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
数字转英文
2006/12/06 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
javascript语言结构小记(一)
2011/09/10 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
python套接字流重定向实例汇总
2016/03/03 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
QQ空间主人寄语大全
2014/04/12 职场文书