【问题标题】:Why does base64 encode return bytes instead of string directly? [duplicate]为什么base64编码直接返回字节而不是字符串? [复制]
【发布时间】:2019-12-21 16:43:39
【问题描述】:
import base64
base64.b64encode(b'bytes required')

>>>b'Ynl0ZXMgcmVxdWlyZWQ='

如果我理解正确的话,base64 是一个 bytes string 表示法。那它为什么不直接给我字符串'Ynl0ZXMgcmVxdWlyZWQ='

还是希望我进一步解码?

喜欢b'Ynl0ZXMgcmVxdWlyZWQ='.decode('ascii')
b'Ynl0ZXMgcmVxdWlyZWQ='.decode('utf-8') ?但它们的结果是一样的。

【问题讨论】:

  • ascii 符号的代码在utf-8 中是一样的,所以结果是一样的。
  • @OlvinR​​oght 是的,base64 只使用 ascii 字符,为什么不直接给我字符串?为什么我需要二进制结果?我想知道:(
  • 这是内存的“经济”。 b"" 字符串是每个字符 1 个字节。

标签: python base64


【解决方案1】:

你说得对,base64 是二进制数据的文本表示。

但是,您忽略了实际实施方面的限制。

import sys

>>> sys.getsizeof("Hello World")
60
>>> sys.getsizeof("Hello World".encode("utf-8"))
44

str 对象只占用比bytes 更多的系统资源。在处理较大的base64 编码数据主体时,这种开销可能会导致性能显着下降。

我还怀疑,由于最初的 python 模块是从 python2.7 移植的(它不区分 strbytes),这也可能只是一个遗留问题。

【讨论】:

  • 我以为 utf-8 是默认编码?
  • 谢谢。我不知道“str 对象只是占用比字节更多的系统资源”。很高兴知道:)
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
相关资源
最近更新 更多