如何在Python 3中将字节转换为字符串

时间:2018-01-01 04:07:34

标签: python python-3.x

我想编写一个返回字符串的函数,而不是字节   功能:

def read_image(path):
    with open(path, "rb") as f:
        data = f.read()
    return data
image_data = read_image("/home/user/icon.jpg")

如何将值image_data转换为str类型。 如果成功转换为字符串,则如何将字符串重新转换为字节。

1 个答案:

答案 0 :(得分:4)

为了与旧代码兼容,您希望以python2中的方式返回字符串对象,并将bytes对象转换为字符串对象。

可能有一种更简单的方法,但我不知道一种,所以我会选择这样做:

return "".join( chr(x) for x in data)

因为迭代字节会产生整数,所以我强行将它们转换回字符并将结果数组连接成一个字符串。

如果您需要使代码可移植,以便您的新方法仍可在Python2和Python 3中运行(尽管可能更慢):

return "".join( chr(x) for x in bytearray(data) )

Bytearray itterates为py2和py3中的整数,与字节不同。

希望有所帮助。

错误的方法:

return data.decode(encoding="ascii", errors="ignore")

可能有一些方法可以注册自定义错误处理程序,但是默认情况下,您将丢失任何超出ascii范围的字节。同样地,使用UTF-8编码会弄乱你的二进制内容。

错误的方法2

str(b'one') == "b'one'" #for py3, but "one" for py2