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") |
如何将值
为了与旧代码兼容,您希望以返回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 |