python中编码和解码_python中的编码与解码

对python的初学者来说,对字符的编码与解码是一个头痛的问题,对我也是一样。python 3严格区分了str与bytes,这对Python的使用者来说一件好事。在python3中字符串是以unicode编码的,unicode是一种不会出现乱码的编码。

字符串的encode与decode

在python 3中可以说原生支持中文,例如:

1

2

3

4

5

6

7In [50]: str = '中文'

In [51]: str

Out[51]: '中文'

In [52]: type(str)

Out[52]: str

如果把str转换成bytes,那用encode方法,相反,使用decode方法,如下:

1

2

3

4

5In [53]: str.encode('utf-8')

Out[53]: b'\xe4\xb8\xad\xe6\x96\x87'

In [54]: b'\xe4\xb8\xad\xe6\x96\x87'.decode()

Out[54]: '中文'

所以在python 3中进行编码的转换记住以下要点即可:

str转换成bytes,使用encode方法,bytes转换为str,使用decode方法

更多关于python中字符编码问题请参考这里和这里

base64模块

在python标准库中有一个base64的标准库,这个模块提供的更加丰富的功能实现对数据的编码与解码,官方文档请看这里,这里记录几个常用的方法 。

encodebytes方法与decodebytes方法

encodebytes方法表示对bytes对象进行编码操作,decodebytes方法的功能刚好相反,是一个解码的操作,两个方法都是返回一个bytes对象,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14In [71]: import base64

In [72]: s = b'this is test str'

In [73]: base64.encodebytes(s)

Out[74]: b'dGhpcyBpcyB0ZXN0IHN0cg==\n'

In [75]: encode = base64.encodebytes(s)

In [76]: encode

Out[76]: b'dGhpcyBpcyB0ZXN0IHN0cg==\n'

In [77]: base64.decodebytes(encode)

Out[77]: b'this is test str'

b64encode方法与b64decode方法

这两个方法也是对bytest对象进行编码与解码操作,也是返回一个bytes对象,做如下测试:

1

2

3

4

5

6

7

8In [83]: s

Out[83]: b'this is test str'

In [84]: base64.b64encode(s)

Out[84]: b'dGhpcyBpcyB0ZXN0IHN0cg=='

In [85]: base64.b64decode(base64.b64encode(s))

Out[85]: b'this is test str'

从编码的输出结果可看出与采用encodebytes方法编码出的结果几乎是一样的,只是最后少了\n这两个字符。

urlsafe_b64encode与urlsafe_b64decode方法

这两个方法也是对bytest对象进行编码和解码操作,同样返回一个bytes对象,做如下测试:

1

2

3

4

5

6

7

8

9

10

11

12

13In [88]: s

Out[88]: b'this is test str'

In [89]: base64.urlsafe_b64encode(s)

Out[89]: b'dGhpcyBpcyB0ZXN0IHN0cg=='

In [90]: url_encode = base64.urlsafe_b64encode(s)

In [91]: url_encode

Out[91]: b'dGhpcyBpcyB0ZXN0IHN0cg=='

In [92]: base64.urlsafe_b64decode(url_encode)

Out[92]: b'this is test str'

发现与采用b64encode方法编码出的结果是一样的。

上边只是base64这个模块的一少数几个方法,更多的方法说明去看官网吧。那为什么base64这个模块提供的上面几个编码方法编码后的内容都是几乎一样的,那为什么会有一同的实现?现在我也不知道这内部的原理和原因。urlsafe_b64encode方法有urlsafe这个关键字,猜想是对url这样类似的bytes对象做编码时应该使用这个方法吧,比如http://zhaochj.github.io或是一个系统路径/etc/test.conf。这个编码方法还要在实际的项目去实践。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值