Python将字节转换为字符串

时间:2015-01-29 19:23:13

标签: python type-conversion byte

我有以下代码:

with open("heart.png", "rb") as f:

    byte = f.read(1)

    while byte:

        byte = f.read(1)

        strb = byte.decode("utf-8", "ignore")

        print(strb)

从" heart.png"读取字节时我必须读取十六进制字节,例如:

b'öx1a', b'öxff', b'öxa4', etc.

以及此格式的字节:

b'A', b'D', b'O', b'D', b'E', etc.    <- spells ADOBE

现在由于某种原因,当我使用上面的代码从字节转换为字符串时,它似乎不能用于十六进制形式的字节,但它适用于其他所有字符。

因此当b'öx1a'出现时,它会将其转换为""(空字符串)

b'H'出现时,它会将其转换为"H"

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:4)

这里有一些事情发生。

PNG file format可以包含以Latin-1或UTF-8编码的文本块。 tEXt块以Latin-1编码,您需要使用'latin-1'编解码器对其进行解码。 iTXt个块以UTF-8编码,需要使用'utf-8'编解码器进行解码。

但是,您似乎正在尝试解码单个字节,而UTF-8中的字符可能跨越多个字节。因此,假设您要读取UTF-8字符串,您应该在尝试解码之前读取要解码的字符串的整个长度。

如果您试图解释文件中的二进制数据,请查看专门用于此目的的struct模块。