我试图通过标准的python库解码base64多行文件,但是只有第一行被解码,其余的被无缘无故地转储。
为什么会这样?
编码前的文件(我在解码后尝试实现的目标):
dataFile.dat
版本:BenWin +版本:3.0.12.1 [CR]
[CR] [LF]
创建时间:2016年9月1日下午12:56:27 [CR]
[CR] [LF]
TIME CODE:0x907e0,0x10004,0x38000c,0x242001b [CR]
[CR] [LF]
...
[CR]和[LF]分别是回车(\ r)和换行符(\ n)的字符代码
我使用base64.b64encode对文件进行base64编码,并希望稍后对其进行解码。这是我的代码段。
encodedData = b'VkVSU0lPTjogQmVuV2luKyBWZXJzaW9uOiAzLjAuMTIuMQo=Cg==Q1JFQVRFRDogMDEgU2VwdGVtYmVyIDIwMTYgMTI6NTY6MjcgUE0KCg==VElNRSBDT0RFOiAweDkwN2UwLCAweDEwMDA0LCAweDM4MDAwYywgMHgyNDIwMDFiCg==Cg=='
data = base64.b64decode(encodedData)
print(data)
返回
b'版本:BenWin +版本:3.0.12.1 \ n'
提前致谢。 使用Python 3.5
答案 0 :(得分:1)
问题似乎是您分别对每一行进行编码,然后将这些编码的字符串连接在一起。 Base-64编码的字符串可能以填充字符结尾,当解码器看到这些填充字符时,它假定这是有效数据的结尾,因此忽略任何后续数据。
以下是如何在Python 3中对Base64编码多行文本。首先,我们需要将Unicode文本转换为字节。然后我们Base64一次性编码所有这些字节。为了解码,我们颠倒过程:首先进行Base64解码,然后将结果字节解码为Unicode字符串。请注意,\r
和\n
已正确保留。
import base64
s = 'VERSION: BenWin+ Version: 3.0.12.1\r\r\nCREATED: 01 September 2016 12:56:27 PM\r\r\nTIME CODE: 0x907e0, 0x10004, 0x38000c, 0x242001b\r\r\n'
print(s)
b = base64.b64encode(s.encode('utf8'))
print(b)
z = base64.b64decode(b).decode('utf8')
print(repr(z))
<强>输出强>
VERSION: BenWin+ Version: 3.0.12.1
CREATED: 01 September 2016 12:56:27 PM
TIME CODE: 0x907e0, 0x10004, 0x38000c, 0x242001b
b'VkVSU0lPTjogQmVuV2luKyBWZXJzaW9uOiAzLjAuMTIuMQ0NCkNSRUFURUQ6IDAxIFNlcHRlbWJlciAyMDE2IDEyOjU2OjI3IFBNDQ0KVElNRSBDT0RFOiAweDkwN2UwLCAweDEwMDA0LCAweDM4MDAwYywgMHgyNDIwMDFiDQ0K'
'VERSION: BenWin+ Version: 3.0.12.1\r\r\nCREATED: 01 September 2016 12:56:27 PM\r\r\nTIME CODE: 0x907e0, 0x10004, 0x38000c, 0x242001b\r\r\n'