【问题标题】:Extra new lines on base64 encode/decode in Python?Python中base64编码/解码的额外新行?
【发布时间】:2020-04-04 10:03:53
【问题描述】:

我已经编写了这些实用函数:

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))) 才能通过。

【问题讨论】:

    标签: python python-3.x base64 decode encode


    【解决方案1】:

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

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

    您可能想改用base64.b64encode

    【讨论】:

    • 我试过了,但现在第二个输出没有任何新行。但我想得到相同的输入,assert(test == der2str(str2der(test)))
    • 鉴于 `\n' 不是 base64 字母表的一部分,我认为这是不可能的 - 解码器将假定嵌入的换行符不是要解码的文本的一部分(我我猜)。
    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 2020-04-18
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多