Python 使用decode64解码错误的填充时出错,是否存在填充?
对于我正在使用的代码,每次编码消息的数据上出现Python 使用decode64解码错误的填充时出错,是否存在填充?,python,base64,decode,Python,Base64,Decode,对于我正在使用的代码,每次编码消息的数据上出现“?”时,我都会返回一个错误“不正确的填充”。在线使用解码器时,我得到下面value1和value2的正确值,但对于value2应该有“?”的地方,我得到了一个异常 代码是: value1 = "Y29udGludWENCg==" expected1 = b'continua\r\n' value2 = "Y29udGludWE_DQo=" expected2 = b'continua?\r\n' data1 = base64.b64decode(
“?
”时,我都会返回一个错误“不正确的填充”
。在线使用解码器时,我得到下面value1
和value2
的正确值,但对于value2
应该有“?”
的地方,我得到了一个异常
代码是:
value1 = "Y29udGludWENCg=="
expected1 = b'continua\r\n'
value2 = "Y29udGludWE_DQo="
expected2 = b'continua?\r\n'
data1 = base64.b64decode(value1)
assert data1 == expected1
data2 = base64.b64decode(value2)
assert data2 == expected2
解码
value2
会抛出一个binascii。错误:填充不正确
异常,但数据的填充量正确(value2
的长度是4的倍数)。您没有标准的Base64数据,您有URL安全的Base64数据
Base64通常使用字母、数字和/
和+
字符,但后两者在URL中具有特殊含义,因此使用了另一种替代方法,即使用-
和
字符
使用来解码这些字符串:
data2 = base64.urlsafe_b64decode(value2)
演示:
您的base64填充确实无效。它可以修复,这是在线解码器可能会做的。只需添加缺少的
'='
。首先删除所有非Base64字符,然后如果长度不是4的倍数,则添加=
字符,直到它是。您可以给我看一个示例martijn吗?啊,我明白了:您有URL安全数据。使用base64.urlsafe\u b64decode()
;一旦我弄明白你想要什么样的数据,我就在这里填上了空白。不要让别人帮你猜。
>>> import base64
>>> value2 = "Y29udGludWE_DQo="
>>> base64.urlsafe_b64decode(value2)
b'continua?\r\n'