【发布时间】:2013-09-08 15:13:23
【问题描述】:
我有 32 字节的二进制数据要编码。它将被放在一个 URL 中,因此 URL 安全的东西更可取。显然,选择的典型编码是十六进制。这会产生一个 64 个字符的字符串。
我花了很多时间查看各种编码,并想知道,在找不到之后,是否有一些编码可以产生少于 64 个字符但没有填充的输出(只是对于 URL 的清洁度,我宁愿没有填充)。一个有效的选项是类似于 Base 64 的版本,它在解码回二进制时自动确定是否需要填充。
看起来 Base 64 应该能够在没有“=”字符的情况下确定正确的填充量是多少,因为您可以在 base 64 字符串的末尾添加任意数量的“=”符号,并且它将始终成功解码(至少使用 Python 的base64.b64decode())。我可以手动剥离并重新添加填充到 base 64 编码字符串,但对于我的用例,这将是很多额外的字符串操作。
【问题讨论】:
-
如果您真的关心性能(不要过早优化),最好的解决方案可能是编写自己的 Base64 编码器,不使用填充,并编写使用查找表的解码器(真的没那么复杂)。根据我自己的经验,语言或编码库中包含的大多数编码器/解码器都没有针对速度进行优化(虽然我不能直接与 python 对话)。
-
@Syon 这是一个非常后期的优化。我们正在向公众公开一个已被多个平台使用了一年多的内部 API。编写我们自己的 Base 64 编码器/解码器绝对是一种选择。甚至可以用 C 语言编写并编译为 Python 库。
标签: python encoding hash hex base64