Python中base64编码/解码多余的换行符?

3 投票
1 回答
608 浏览
提问于 2025-06-08 05:50

我写了一些工具函数:

import base64

def der2str(der):
    return bin2str( base64.encodebytes(der) )

def str2der(str_):
    return base64.b64decode( str2bin(str_) )

def bin2str(binary):
    return binary.decode('utf8')

def str2bin(str_):
    return str_.encode('utf8')

然后我运行了:

if __name__ == '__main__':
    test = 'MIIEowIBAAKCAQEA6cVU+6GZyr1jaxvJcLEdRb9cicL/4Soe/HqN+gE/UdM5C71aG6HhNSplj1qi\nX8Abffen'
    print(test)
    print(der2str(str2der(test)))

但是输出是:

MIIEowIBAAKCAQEA6cVU+6GZyr1jaxvJcLEdRb9cicL/4Soe/HqN+gE/UdM5C71aG6HhNSplj1qi
X8Abffen
MIIEowIBAAKCAQEA6cVU+6GZyr1jaxvJcLEdRb9cicL/4Soe/HqN+gE/UdM5C71aG6HhNSplj1qi
X8Abffen


为什么我在第二次打印时会多出两个空行呢?

[编辑]
根据标记的答案,使用 return bin2str( base64.b64encode(der) ) 是可以正常工作的,只要输入字符串 test 不包含任何 '\n'

如果有人需要这些空行,那么字符串必须以 '\n' 结尾,这样断言 assert(test == der2str(str2der(test))) 才能通过。

相关问题:

  • 暂无相关问题
暂无标签

1 个回答

2

关于 base64.encodebytes(s) 的说明提到,它会在编码时插入换行符。

这个方法会对像字节一样的对象 s 进行编码,s 可以包含任意的二进制数据。它会返回一个包含 base64 编码数据的字节串,并且每输出 76 个字节就会插入一个换行符(b'\n'),最后还会确保有一个换行符,这些都是根据 RFC 2045(MIME)标准来的。

你可能更想使用 base64.b64encode 方法。

撰写回答