Python 中 base64 encode/decode 的额外新行?

Extra new lines on base64 encode/decode in Python?

我写了这些实用函数:

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


为什么我在第二次打印时多了这两个新行?

[编辑]
根据标记的答案,只要输入字符串 test 不包含任何 '\n'.

,使用 return bin2str( base64.b64encode(der) ) 就可以正常工作

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

base64.encodebytes(s) 的文档声明它插入换行符

Encode the bytes-like object s, which can contain arbitrary binary data, and return bytes containing the base64-encoded data, with newlines (b'\n') inserted after every 76 bytes of output, and ensuring that there is a trailing newline, as per RFC 2045 (MIME).

您可能想改用 base64.b64encode