在python2.7中读取二进制模式会返回一个' str'类型。为什么会这样?

时间:2018-03-12 06:37:53

标签: python python-2.7 python-2.x

我的目标是在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;。我很困惑。以下是问题:

  1. 是&#34;字节串&#34;与传统字符串不同(如C / C ++等所用)。

1 个答案:

答案 0 :(得分:3)

在Python 2中,文本和字节之间的差异并不像Python 3中那样发达,Python 3具有单独的类型 - str用于文本,其中各个项目是Unicode字符,{{ 1}}表示二进制数据,其中各个项目是8位字节。

由于Python 2没有bytes类型,因此它为两种类型的数据使用了字符串。尽管Unicode类型是在Python 2中引入的,但没有尝试改变文件处理数据的方式,并且解码完全由程序员完成。

类似地,在C中,“string”最初意味着字节串,然后随着开发人员意识到文本与字节数据的不同而引入宽字符类型。

作为程序员,您应该始终尝试保持字符串数据与用于在特定编码中表示它的字节之间的分离。最简单的规则是“对输入进行解码,对输出进行编码” - 这样您就知道您的文本正在使用适当的编码。