Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用decode64解码错误的填充时出错,是否存在填充?_Python_Base64_Decode - Fatal编程技术网

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'