我正在尝试使用python3中的自定义字符集进行base64编码。我在SO中看到的大多数示例都与Python2相关,因此我不得不对代码进行一些小的调整。我面临的问题是,我正在用_
替换字符/
,但它仍然用/
打印。我的代码是:这只是一个示例,我不想只使用urlsafe字符来创建base64custom
可以是长度正确的任何内容
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='
我如何才能使翻译工作正常,以便将出现的/
正确地替换为_
我应该明确指出,我并不是只尝试像urlsafe这样的一种base64编码,而是任何可能的字符集。这将是一个用户可以传递自己的字符集的函数。我正在寻找逐字符映射,而不是字符串切片
由于我的问题的清晰性存在一些混乱,我试图补充更多细节
我正在尝试编写一个函数,该函数可以从用户处获取任意字符集,然后在base64编码之前分别映射它们。大多数答案都是关于操作altchars
或字符串切片和替换,但这并不能解决所有需求
例如,itoa64字符集是:
./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=
或unix加密格式为./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
。答案虽然正确,但不能解决这些情况
如果要切换的字符仅为
+
和\
,则可以使用base64.urlsafe_b64encode分别替换为-
和_
或者,您可以使用base64.b64encode的可选参数将这些字符替换为您自己选择的字符:
如果你需要使用全新的字母表,你可以这样做
哪些产出:
这不应该起作用吗:
我得到以下输出:
或者,如果您坚持,该习惯包含:
然后使用:
相关问题 更多 >
编程相关推荐