如果我跑:
import base64
data = open('1.dat', 'rb').read()
decoded = base64.b64decode(data)
encoded = base64.b64encode(decoded)
data == encoded
结果我得到“假”? 如何解码/编码以获得原始结果?
答案 0 :(得分:1)
不幸的是,Base64不是base64。实现中可能存在差异。一些实现例如插入行在编码时每76个字符中断,有些则没有。
答案 1 :(得分:0)
您必须在b64encode()
之前b64decode()
数据:
>>> 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
模块的编码方式不同。
答案 2 :(得分:0)
base64的编码方式有一定的灵活性,例如插入换行符。可能还有一些替代字符,base64
module允许您在编码和解码时指定。由您决定是否指定了正确的替换字符,否则很容易比较两个字符串而忽略任何换行符或空格:
''.join(data.split()) == ''.join(encoded.split())