"rb"模式下的 Python 文件读取会返回字节超过 8 位且非十六进制字符的字节字符串?



我正在尝试在python中以字节模式读取文件(带有图像文件)。下面是我的简单代码:

f = open("./img.jpg", "rb")
print(f.read())

输出的结果是一个大字节串。下面只是一段摘录(很可能不是从字符串的开头摘录的,因为打印的字节太多了,我的控制台窗口不允许我输入比下面一行开头的9d@更高的值:

9d@xe7x8axfexc3<6xc8 @9xf9Tdx1cx8cx91xffx00xd7xc7xa5x7fx9fxb7xedxd5xe3xfdoxe1xd7xedexfb2xxebxc3xb8x97xc4?txbc9}xf1wxc3xb6dxed[xbdgxc2?x104xcdrxdaxc2Fx19"x1bxd6xf0x9cVrx0c|xc9pxcbxc8$x0fxefx7fxe1gx8b4x1fx1dx?xc2x9e6xf0xb5xfczxa7x85xbcgxe1xbdx07xc5xfex18xd4xe2`xd1xea>x1dxf1>x95gxaeh7xe8W#x13iZx85x9cx98xcfx1ef99xaf;4x8bTxb0x13_xc9$xfd}xa5I/xfcx95xb5xe9x16~Sxc5x98x1cD3,xc7x1dV?xecxb8xfaxdcx94Zxeaxf0xd40xd4xeb+xbdxdcyxe9xc9xa5xb2x9c{x9exbfx1fxf0xfd?x98&xad*x06x07?Oxe4jx94ax8eqxdbxf4xabxb1xe7xa1xf4xcfxe3xc75xe4xafyZxfaxee~uSM<xc5x11(xe8?x1exffx00x81xa7x81x81x8aZ*x0e^}t
现在,我注意到一些有趣的事情。其中一些"字节"有非十六进制字符,有些有超过2个字符(即使十六进制的1字节只有2个字符)。例如,一个有效的字节应该是x8a(可以在字符串的开头看到)。然而,这个字符串也有像xc3<6或9d@或xf9Td这样的东西。从这些示例中可以看出,它们的特征字符如'@'或'<'或'T'不是十六进制字符,并且这些示例的长度也超过2个字符。

我该如何解释这个?这些都是"字节"吗?甚至应该被视为字节吗?这和文件格式有关吗?也许这根本就不是魔法?有人能帮我弄明白这样的字节字符串吗?

f.read()将返回对bytes类的引用。Print将隐式地尝试将其转换为字符串表示形式。有些字符可以打印,有些则不能。不可打印的部分将以十六进制格式显示

最新更新