我正在尝试使用python3中的自定义字符集进行base64编码。我在SO中看到的大多数示例都与python2相关,因此我不得不对代码进行一些小的调整。我面临的问题是,我正在用_
替换字符/
,但它仍然用/
打印。我的代码是:这只是一个示例,我并不是只尝试使用带有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
。这些答案虽然正确,但并不能解决这些情况。你知道吗
如果要切换的字符只有
+
和\
,则可以使用base64.urlsafe_b64encode分别替换为-
和_
。你知道吗或者,您可以使用base64.b64encode的可选参数将这些字符替换为您自己选择的字符:
如果你需要使用一个全新的字母表,你可以这样做
输出:
这不应该起作用吗:
我得到以下输出:
或者如果你坚持的话,这个习俗包含:
然后使用:
相关问题 更多 >
编程相关推荐