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

how to convert bytes to string in Python 3

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
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类型。如果转换为字符串成功,如何将字符串重新转换为字节。


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

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

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

因为迭代字节会产生整数,所以我强制将它们转换回字符,并将得到的数组连接成字符串。

如果您需要使代码可移植,以便您的新方法仍然可以在python2和python 3中工作(尽管速度可能较慢):

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

与字节不同,bytearray将py2和py3中的数据转换为整数。

希望有帮助。

错误做法:

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

可能有注册自定义错误处理程序的方法,但默认情况下,您将丢失ASCII范围之外的任何字节。同样,使用UTF-8编码会破坏二进制内容。

错误的方法2

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