Python 中关于字节串和 base64 编码的混淆
Confusion about byte strings and base64 encoding in Python
在 Python 3 中,假设我有一个字节串:
my_byte_string = b'\x07L\x1b\xa8b\x8f\xba\x1b{\x1c\x16CwW\xa5\xae!\x93MY'
我使用 base64 模块得到这个:
my_base64_string = base64.b64encode(my_byte_string)
print(my_base64_string)
b'B0wbqGKPuht7HBZDd1elriGTTVk='
当我这样做时,我对“\”字符会发生什么感到困惑。我知道它们表示不同字节的分隔,但它们是像其他字符一样由 b64encode 编码,还是被忽略了?
'\'
字符不是表示不同字节的分隔,是一个string literal,用来转义有特殊意义的字符。在您的情况下,您使用 \x<hex>
,它告诉 Python 解释器将您指定的 字节值 放入字符串中。因此,您按顺序指定的这些字节(0x07L
、0x1b
、...)被编码为 base64,而不是其他任何内容。
要验证这一点,请查看二进制数据的十六进制表示形式:
>>> import binascii
>>> binascii.hexlify(my_byte_string)
b'074c1ba8628fba1b7b1c16437757a5ae21934d59'
在 Python 3 中,假设我有一个字节串:
my_byte_string = b'\x07L\x1b\xa8b\x8f\xba\x1b{\x1c\x16CwW\xa5\xae!\x93MY'
我使用 base64 模块得到这个:
my_base64_string = base64.b64encode(my_byte_string)
print(my_base64_string)
b'B0wbqGKPuht7HBZDd1elriGTTVk='
当我这样做时,我对“\”字符会发生什么感到困惑。我知道它们表示不同字节的分隔,但它们是像其他字符一样由 b64encode 编码,还是被忽略了?
'\'
字符不是表示不同字节的分隔,是一个string literal,用来转义有特殊意义的字符。在您的情况下,您使用 \x<hex>
,它告诉 Python 解释器将您指定的 字节值 放入字符串中。因此,您按顺序指定的这些字节(0x07L
、0x1b
、...)被编码为 base64,而不是其他任何内容。
要验证这一点,请查看二进制数据的十六进制表示形式:
>>> import binascii
>>> binascii.hexlify(my_byte_string)
b'074c1ba8628fba1b7b1c16437757a5ae21934d59'