我的目标是在Python中逐字节读取文本(或)文件。我遇到了一些堆栈溢出问题:Reading binary file and looping over each byte
并使用以下方法:
with open("./test", "rb") as in_file:
msg_char = in_file.read(1)
print(type(msg_char))
并将输出作为
<type 'str'>
我在另一个问题Read string from binary file上检查了这个问题,其中 read返回一个字符串;从某种意义上来说,字符串&#34;。我很困惑。以下是问题:
答案 0 :(得分:3)
在Python 2中,文本和字节之间的差异并不像Python 3中那样发达,Python 3具有单独的类型 - str
用于文本,其中各个项目是Unicode字符,{{ 1}}表示二进制数据,其中各个项目是8位字节。
由于Python 2没有bytes
类型,因此它为两种类型的数据使用了字符串。尽管Unicode类型是在Python 2中引入的,但没有尝试改变文件处理数据的方式,并且解码完全由程序员完成。
类似地,在C中,“string”最初意味着字节串,然后随着开发人员意识到文本与字节数据的不同而引入宽字符类型。
作为程序员,您应该始终尝试保持字符串数据与用于在特定编码中表示它的字节之间的分离。最简单的规则是“对输入进行解码,对输出进行编码” - 这样您就知道您的文本正在使用适当的编码。