【发布时间】:2019-11-18 14:53:21
【问题描述】:
我正在尝试使用 python3 中的自定义字符集进行 base64 编码。我在 SO 中看到的大多数示例都与 Python 2 相关,因此我不得不对代码进行一些小的调整。我面临的问题是我正在用_ 替换字符/,但它仍在用/ 打印。我的代码是:这只是一个例子,我不想只使用带有 urlsafe 字符的 base64。 custom 可以是任何长度正确的东西。
import base64
data = 'some random? data'
print(base64.b64encode(data.encode()))
std_base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
custom = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
data = data.translate(str.maketrans(custom, std_base64chars)).encode()
print(base64.b64encode(data))
# Both prints
b'c29tZSByYW5kb20/IGRhdGE='
b'c29tZSByYW5kb20/IGRhdGE='
我怎样才能使翻译工作,以便/ 的出现正确替换为_?
编辑
我应该明确一点,我不是想在这里只做一种类型的 base64 编码,比如 urlsafe,而是任何可能的字符集。这将是一个功能,用户可以传递他们自己的字符集。我正在寻找一个字符一个字符的映射,而不是字符串切片。
编辑
由于我的问题的清晰度存在一些混淆,因此我尝试添加更多详细信息。
我正在尝试编写一个函数,该函数可以从用户那里获取任意字符集,然后在 base64 编码之前单独映射它们。大多数答案都围绕着操纵altchars 或字符串切片和替换,但这并不能解决所有需求。
例如,itoa64 字符集是:
./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz= 或 unix crypt 格式为 ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz。答案虽然正确,但并未解决这些情况。
【问题讨论】:
标签: python python-3.x string encoding base64