我想编写一个函数,它返回一个字符串而不是字节。
函数如下:
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
转换为字符串类型。如果成功转换为字符串,如何将字符串重新转换为字节。
我想编写一个函数,它返回一个字符串而不是字节。
函数如下:
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
转换为字符串类型。如果成功转换为字符串,如何将字符串重新转换为字节。
return "".join( chr(x) for x in data)
因为迭代字节会得到整数,所以我强制将它们转换回字符并将结果数组连接成字符串。
如果您需要使代码可以在Python 2和Python 3中都能正常工作(尽管可能会更慢),则需要使代码具有可移植性:
return "".join( chr(x) for x in bytearray(data) )
字节数组在Python 2和Python 3中都可以迭代为整数,而bytes类型则不行。
希望这有所帮助。
错误的方法:
return data.decode(encoding="ascii", errors="ignore")
可能有办法注册自定义错误处理程序,但默认情况下,您将无法获取ASCII范围之外的任何字节。同样,使用UTF-8编码将破坏您的二进制内容。
错误的方法2
str(b'one') == "b'one'" #for py3, but "one" for py2
return "".join(map(chr,data))
- RufusVS
str()
呢? - dmitryroUnicodeDecodeError: 'utf-8' 编解码器无法解码字节0xff
- user3410960