如果我运行:
import base64
data = open('1.dat', 'rb').read()
decoded = base64.b64decode(data)
encoded = base64.b64encode(decoded)
data == encoded
我得到"假"作为结果?如何解码/编码获得原始结果?
Base64不是Base64。在实现上可能存在差异。有些实现例如在编码时每76个字符插入换行符,有些没有。
在b64decode()
之前必须先将数据b64encode()
:
>>> import base64
>>> data = b"qwertzuiop"
>>> encoded = base64.b64encode(data)
>>> decoded = base64.b64decode(encoded)
>>> data == decoded
True
如果你的输入文件已经是base64,你需要先b64decode()
它,而不是编码。所以你的代码应该是这样的:
import base64
data = open('1.dat', 'rb').read() # base64 encoded string
decoded = base64.b64decode(data)
encoded = base64.b64encode(decoded)
data == encoded
如果您得到False结果,您的data
是Base64编码不同于base64
模块所做的。
base64的编码方式有一些灵活性,例如插入换行符。在编码和解码时,base64
模块还允许您指定一些替代字符。由您来确定是否指定了适当的替代字符,否则很容易比较两个字符串,而忽略任何换行符或空格:
''.join(data.split()) == ''.join(encoded.split())