为什么当我完成解码和编码时,我的字符串末尾有一个换行符?

Why is there a newline on the end of my string when I finish decoding and encoding it?

这是我的代码:

def hex_to_base64(hex_string):
    clear = hex_string.decode("hex")
    print(clear)
    base64 = clear.encode("base64")
    print(base64)
    return base64

hexstring = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
result = hex_to_base64(hexstring)

# verify results
if result == 'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t':
    print("Yuuuup!!! %r" % result)
else:
    print("Nope! %r" % result)

我的结果验证测试失败。它打印出:

Nope! 'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'

'\n'换行符是从哪里来的?我可以将其剥离以通过测试,但我觉得那是作弊。

Base64编码包括:

>>> 'a'.encode('base64')
'YQ==\n'

其他Base64编码方式也包括那个换行符;参见 base64.encode() 例如:

encode() returns the encoded data plus a trailing newline character ('\n').

这个选择似乎是历史性的; MIME Base64 内容传输编码规定使用最大行长度并插入换行符以保持该长度,但 RFC 3548 声明实现不得。

Python 提供两种选择;你可以在这里使用base64.b64encode() function:

>>> import base64
>>> base64.b64encode('a')
'YQ=='

如果您正在寻找一种方法来获取没有尾随换行符的编码字符串,base64.b46encode 函数可以做到这一点。区别如下:

In [19]: base64.encodestring('a')
Out[19]: 'YQ==\n'

In [20]: base64.b64encode('a')
Out[20]: 'YQ=='