python3url编解码base64编解码ASE加解密

字符编解码

Python3相对于Python2的一大改变就是,对默认字符类型进行了修改。Python2中定义字符串默认为二进制字符串,强制加前缀u的才是unicode字符串;而Python3中字符串默认为unicode,强制加前缀b的才是二进制字符串。(也就是刚好反过来了)

这里的二进制字符串:指的是进行过编码后的字符串。即utf8、gbk、ascii等编码后的串都是二进制的。存放到文件的时候也必须是二进制的内容。

unicode字符串:是一种在内存中存在的编码规范,它可以和任意其它类型的编码进行转换。比如:utf-8、gbk、ascii等。并且其它编码在进行互相转换时,都必须通过unicode来中转。该字符串只在内存中存在,没有具体的编码实现。

已"中国"为例,来看下各种编码方式下的表示形式:

"中国"
unicode:\u4e2d\u56fd
utf8:\xe4\xb8\xad\xe5\x9b\xbd
gbk:\xd6\xd0\xb9\xfa

可以看到同样的字符串,在不同的编码中其对应的值是不一样的。但是不管哪种编码都可以转成unicode,unicode也可以转成任意其它的编码。(unicode被称为万国码,是世界上最大的字符集,可以支持编码全球的语言,但目前在编的并不是全部)

1、编码

python3中字符编码很简单。直接通过encode方法即可。(该方法只有unicode字符对象才有,Python3中unicode是str对象)

s = '中国'    # => unicode
print(type(s))    # => str
s2 = s.encode('utf8')    # => utf8
print(type(s2))    # => byte
s3 = s.encode('gbk')    # => gbk
print(type(s3))    # => byte

2、解码

Python3中解码用的是decode方法。(该方法只有byte对象才有)

b = b'中国'    # => 具体编码编程环境的默认编码而定,通常为utf8
print(type(b))    # => byte
b1 = b.decode('utf8')    # => unicode
print(type(b1))    # => str

URL编解码

1、解析URL字符串

from urllib import parse

url = 'https://www.baidu.com/s?wd=python3%20url编码'
parsed = parse.urlparse(url)
print(parsed)

urlparse会把完整的URL串解析成各个部分,方便我们直接提取特定内容。其执行结果如下:

ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=python3%20url编码', fragment='')

即解析后分解为:协议,域名、路径、参数、查询字符串等。我们可以直接使用对应的属性名来获取。比如:获取query内容。

print(parsed.query)    # => wd=python3%20url编码

2、query参数编码

由于query参数对应的是GET请求时,附件在URL路径后的查询参数。为了避免浏览器解析到特殊字符而导致不可预知的问题,所以通常需要对其内容进行编码,称为URLEncode。Python3中编码的方式如下:

d = {
    'name': '陈霸天',
    'sex': 'male',
    'age': 18
}
query = parse.urlencode(d)
print(query)    # => name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18

使用urlencode方法,可以很方便的对一个给定的字典对象的键值内容进行编码,并串联成一个有效格式的query字符串。可以直接附件到URL路径后来使用。(中间需要?链接)

3、query参数解码

有编码就有对应的解码方法,python3中其对应的解码方法不是urldecode,而是parse_qs方法。具体如下:

query = 'name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18'
d = parse.parse_qs(query)
print(d)    # => {'name': ['陈霸天'], 'sex': ['male'], 'age': ['18']}

注意返回的字典中,其value值都是list对象。这是因为有些键可能有多个值的情况。(正常可能会发生的情况)

4、纯字符串URL编码

上面方法是对字典对象进行的编码,如果只需对单个字符串内容编码, 则可以使用quote方法。

s = '中国'
print(parse.quote(s))    # => %E4%B8%AD%E5%9B%BD

5、纯字符串URL解码

字符串的解码方法是和编码方法对应的叫unquote。使用方式如下:

s = '%E4%B8%AD%E5%9B%BD'
print(parse.unquote(s))    # => 中国

BASE64编解码

猜你喜欢

转载自blog.csdn.net/five3/article/details/83626446