Python菜鸟晋级11----urlencode与unquote

当url地址含有中文或者“/”的时候,这是就需要用做urlencode一下编码转换。

一、urlencode

urlencode的参数是词典,它可以将key-value这样的键值对转换成我们想要的格式。如果你用的是python2.*,urlencode在urllib.urlencode。如果使用的是python3,urlencode在urllib.parse.urlencode

例如

import urllib.parse

data={"name":"王尼玛","age":"/","addr":"abcdef"}
print(urllib.parse.urlencode(data))

输出为

addr=abcdef&name=%E7%8E%8B%E5%B0%BC%E7%8E%9B&age=%2F

如果只想对一个字符串进行urlencode转换,怎么办?urllib提供另外一个函数:quote()

print(urllib.parse.quote("hahaha你好啊!"))

输出为

hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81

二、unquote

当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()!

import  urllib.parse

data={"name":"王尼玛","age":"/","addr":"abcdef"}
print(urllib.parse.urlencode(data))
print(urllib.parse.quote("hahaha你好啊!"))
print(urllib.parse.unquote("hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81"))

输出

addr=abcdef&name=%E7%8E%8B%E5%B0%BC%E7%8E%9B&age=%2F
hahaha%E4%BD%A0%E5%A5%BD%E5%95%8A%EF%BC%81
hahaha你好啊!

在做urldecode的时候,看unquote()这个函数的输出,是对应中文在gbk下的编码,在对比一下quote()的结果不难发现,所谓的urlencode就是把字符串转车gbk编码,然后把\x替换成%。如果你的终端是utf8编码的,那么要把结果再转成utf8输出,否则就乱码。

可以根据实际情况,自定义或者重写urlencode()、urldecode()等函数。

时间: 2024-10-22 15:36:46

Python菜鸟晋级11----urlencode与unquote的相关文章

Python菜鸟晋级03----repr() 与str() 函数的区别

两者均是将数值转换成字符串的形式,但是有细微的区别 str()会创建一个适合人阅读的字符串. repr()会创建适合解释器阅读的字符串. >>> hello = 'hello, world\n' >>> hellos = repr(hello) >>> hellos "'hello, world\\n'" #出现反斜杠进行转意 >>> hellos=str(hello) >>> hellos 'h

Python菜鸟晋级06----特殊属性整理

Python一切皆对象(object),每个对象都可能有多个属性(attribute). #现在我们来总结下所有的系统定义属性和方法, 先来看下保留属性: >>> Class1.__doc__ # 类型帮助信息 'Class1 Doc.' >>> Class1.__name__ # 类型名称 'Class1' >>> Class1.__module__ # 类型所在模块 '__main__' >>> Class1.__bases__

Python菜鸟晋级08----str.format()方法

用法 str.format()方法会返回一个新的字符串,在新的字符串中,原字符串的替换字段(大括号中和数字是预留的替换字段)被format方法中的参数代替. 替换字段被format方法中参数代替有一下集中形式------------------------- 按照位置 '{0},{1}'.format('kzc',18) #按照替换字段中的数字带入format方法中的参数 'kzc,18' '{},{}'.format('kzc',18) #替换字段中没有数字就按照顺序带入format方法中的参

Python菜鸟晋级07----闭包

介绍 闭包(closure)是函数式编程的重要的语法结构.函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式).在面向过程编程中,我们见到过函数(function):在面向对象编程中,我们见过对象(object).函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability).闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性. 不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法

Python菜鸟晋级02----Python3的bytes与str

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分. 文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰.你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然).这是件好事. 不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心: 字符串可以编码成字节包,而字节包可以解码成字

Python菜鸟晋级05----with....as....(上下文管理器)

介绍 上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语法形式是with...as... 应用 比较一下两段代码: 没有使用上下文管理器: writer = open("test.txt", "w") try: writer.write('Hello ') writer.write('World') finally:

Python菜鸟晋级04----raw_input() 与 input()的区别

raw_input() 与 input()均是python 的内建函数,通过读取控制台的输入与用户实现交互.但他们的功能不尽相同.举两个小例子 >>> raw_input_A = raw_input("raw_input: ") raw_input: abc >>> input_A = input("Input: ") Input: abc Traceback (most recent call last): File "

python菜鸟晋级10----数据库操作

介绍 python3发布以来,获取了广大程序员们的差评,说不稳定,又是不兼容什么的,不过差评归差评,python3既然已经发布,肯定是个趋势,但在python3.4里面,使用原来python2.7的mysqldb已经不能连接mysql数据库了,比较令人纠结,不过我们可以使用pymysql,来完成连接mysql的重任,步骤如下: 序号 描述 1 去github上下载pymysql的安装包 pymysql 2 解压到某个盘符下 3 打开cmd窗口(win环境下),进入pymysql的根目录下执行命令

Python菜鸟晋级12----多线程

Python 多线程 多线程类似于同一时候执行多个不同程序,多线程执行有例如以下长处: 使用线程能够把占领长时间的程序中的任务放到后台去处理. 用户界面能够更加吸引人.这样比方用户点击了一个button去触发某些事件的处理,能够弹出一个进度条来显示处理的进度 程序的执行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比較实用了.在这样的情况下我们能够释放一些珍贵的资源如内存占用等等. 线程在运行过程中与进程还是有差别的. 每一个独立的线程有一个程序运行的入口.顺序