如何将字节数组转换为字符串?

6

我刚刚完成了一个哈夫曼压缩算法。我使用bytearray()将压缩后的文本从字符串转换为字节数组。我正在尝试解压我的哈夫曼算法。我唯一的担忧是我无法将我的字节数组转换回字符串。是否有任何内置函数可用于将我的字节数组(具有变量)转换回字符串?如果没有,是否有更好的方法将我的压缩字符串转换为其他格式?我尝试使用byte_array.decode(),但我得到了这个结果:

print("Index: ", Index) # The Index


# Subsituting text to our compressed index

for x in range(len(TextTest)):

    TextTest[x]=Index[TextTest[x]]


NewText=''.join(TextTest)

# print(NewText)
# NewText=int(NewText)


byte_array = bytearray() # Converts the compressed string text to bytes
for i in range(0, len(NewText), 8):
    byte_array.append(int(NewText[i:i + 8], 2))


NewSize = ("Compressed file Size:",sys.getsizeof(byte_array),'bytes')

print(byte_array)

print(byte_array)

print(NewSize)

x=bytes(byte_array)
x.decode()

UnicodeDecodeError: 'utf-8'编解码器无法解码位置0处的字节0x88:起始字节无效


您可以通过调用bytearray.decode()方法并提供编码来将其转换为字符串。例如:byte_array.decode('ascii')。如果您省略解码参数,则默认为“utf-8”。 - martineau
嗨,当我添加了你的代码后出现了这个错误:byte_array.decode('ascii') UnicodeDecodeError: 'ascii' codec can't decode byte 0x88 in position 0: ordinal not in range(128)。当我去掉了 'ascii' 部分时,我得到了这个错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x88 in position 0: invalid start byte。 - Mohamed Alremeithi
这意味着您的字节数组中的数据在这些编码中不包含有效字符。 您需要找到一个可接受的字符集。文档中有一些字符集——'hex'可能很好用。您也可以使用 'latin1',它将代码点0-255映射到字节0x0-0xff。 这样做将允许您稍后通过使用 the_string.encode('latin1') 将结果转换回字节。 我是在这个答案中第一次听说这个方法(用于解决不同问题)。 - martineau
1个回答

5
您可以使用.decode('ascii')(如果为空则默认为utf-8)来进行解码。
>>> print(bytearray("abcd", 'utf-8').decode())
abcd

来源: 如何将字节转换为字符串?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接