我想编写一个返回字符串的函数,而不是字节 功能:
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类型。
如果成功转换为字符串,则如何将字符串重新转换为字节。
答案 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