前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于编码解码问题,我给大家总结好了,请查收

关于编码解码问题,我给大家总结好了,请查收

作者头像
Python知识大全
发布2020-02-21 16:01:01
8070
发布2020-02-21 16:01:01
举报
文章被收录于专栏:Python 知识大全

问题

将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成 一个十六进制字符串。

解决方案

如果你只是简单的解码或编码一个十六进制的原始字符串,可以使用  binascii 模块。

例如:

代码语言:javascript
复制
>>> s = b'hello'>>> import binascii>>> h = binascii.b2a_hex(s)>>> hb'68656c6c6f'>>> binascii.a2b_hex(h)b'hello'>>>

类似的功能同样可以在 base64 模块中找到。

例如:

代码语言:javascript
复制
>>> import base64
>>> h = base64.b16encode(s)
>>> h
b'68656C6C6F'
>>> base64.b16decode(h)
b'hello'
>>>

结论

大部分情况下,通过使用上述的函数来转换十六进制是很简单的。

上面两种技术的主要不同在于大小写的处理。函数 base64.b16decode() 和 base64.b16encode() 只能操作大写形式的十六进制字母

而 binascii 模块中的函数大小写都能处理。

还有一点需要注意的是编码函数所产生的输出总是一个字节字符串。

如果想强制 以 Unicode 形式输出,你需要增加一个额外的界面步骤。

例如:

代码语言:javascript
复制
>>> h = base64.b16encode(s)
>>> print(h)
b'68656C6C6F'
>>> print(h.decode('ascii'))
68656C6C6F
>>>

在解码十六进制数时,函数 b16decode() 和 a2b_hex() 可以接受字节或 unicode 字符串。但是,unicode 字符串必须仅仅只包含 ASCII 编码的十六进制数。

问题

需要使用 Base64 格式解码或编码二进制数据。

解决方案

base64 模块中有两个函数 b64encode() and b64decode() 可以帮你解决这个问题。

例如;

代码语言:javascript
复制

>>> s = b'hello'
>>> import base64

>>> a = base64.b64encode(s)
>>> a
b'aGVsbG8='

>>> base64.b64decode(a)
b'hello'
>>>

结论

Base64 编码仅仅用于面向字节的数据比如字节字符串和字节数组。此外,编码处 理的输出结果总是一个字节字符串。如果你想混合使用 Base64 编码的数据和 Unicode 文本,你必须添加一个额外的解码步骤。

例如:

代码语言:javascript
复制
>>> a = base64.b64encode(s).decode('ascii')
>>> a
'aGVsbG8='
>>>

当解码 Base64 的时候,字节字符串和 Unicode 文本都可以作为参数。但是,Unicode 字符串只能包含 ASCII 字符。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 知识大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档