Python 3和base64编码的二进制文件

时间:2016-06-21 12:44:28

标签: python python-3.x base64 binaries

我是Python的新手,我确实遇到了困扰我的问题。

我使用以下代码获取我的zip文件的base64字符串表示。

with open( "C:\\Users\\Mario\\Downloads\\exportTest1.zip",'rb' ) as file:
    zipContents = file.read()
    encodedZip = base64.encodestring(zipContents)

现在,如果我输出字符串,它将包含在b''表示中。这对我来说没有必要,我想避免它。此外,它每76个字符添加一个换行符,这是另一个问题。有没有办法获取二进制内容并代表它没有换行符和尾随和前导b''?

仅用于比较,如果我在PowerShell中执行以下操作:

$fileName = "C:\Users\Mario\Downloads\exportTest1.zip"
$fileContentBytes = [System.IO.File]::ReadAllBytes($fileName)
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) 

我确实得到了我正在寻找的确切字符串,没有b''且没有\ n每76个字符。

2 个答案:

答案 0 :(得分:11)

来自base64 package doc

base64.encodestring

"对类似字节的对象进行编码,该对象可以包含任意二进制数据,并返回包含base64编码数据的bytes,并在之后插入换行符(b"\n")每个76字节的输出,并确保有一个尾随的换行符,根据RFC 2045(MIME)。"

您想要使用

base64.b64encode

"使用Base64对类字节对象进行编码并返回编码的bytes。"

示例:

import base64

with open("test.zip", "rb") as f:
    encodedZip = base64.b64encode(f.read())
    print(encodedZip.decode())

decode()会将二进制字符串转换为文本。

答案 1 :(得分:7)

使用b64encode进行编码而不使用换行符,然后使用.decode('ascii')对生成的二进制字符串进行解码,以获得正常的字符串。

encodedZip = base64.b64encode(zipContents).decode('ascii')