所以我有一个字节流,我将其收集到一个列表中,如下所示:
byte_list.append(bytes[0])
这种格式将字节解码为整数(我发现 Python 的几个怪癖之一就是为什么它在没有我要求的情况下将字节解码为 ASCII 或整数)
所以过了一段时间我就有了这个列表
bytes
byte_list = [83, 0, 116, 0, 97, 0, 110, 0, 100, 0, 97, 0, 114, 0, 100, 0, 70, 0, 105, 0, 114, 0, 109, 0, 97, 0, 116, 0, 97, 0, 46, 0, 105, 0, 110, 0, 111]
如何将此列表解码为其字符串值?我想到的是:
for b in byte_list:
new_list.append(chr(byte_list[b]))
但这似乎不正确。有人可以提供有关如何解码此内容的指导吗?
所以我有一个字节流
你想要文字。查看数据,它采用 UTF-16LE(little-endian)编码。解码:
>>> byte_list = [83, 0, 116, 0, 97, 0, 110, 0, 100, 0, 97, 0, 114, 0, 100, 0, 70, 0, 105, 0, 114, 0, 109, 0, 97, 0, 116,
0, 97, 0, 46, 0, 105, 0, 110, 0, 111, 0]
>>> bytes(byte_list).decode('utf-16le')
'StandardFirmata.ino'
请注意,我添加了最后一个零,因为对于完整的 UTF-16 流来说,数据短了一个字节。我认为数据只是一个样本,并不完整。 UTF-16 每个字符需要两到四个字节。
如果您从字节流开始,它是一个值 0-255 的列表。为了方便起见,它仅显示,如 ASCII:
>>> bytes(byte_list)
b'S\x00t\x00a\x00n\x00d\x00a\x00r\x00d\x00F\x00i\x00r\x00m\x00a\x00t\x00a\x00.\x00i\x00n\x00o'
在字节格式中,您只需将其
.decode()
转换为Unicode文本即可。
索引 1, 3, 5, ... 包含
0
。使用切片符号跳过它们:
>>> ''.join(map(chr, byte_list[::2])) # [::2]: to only get 0, 2, 4, ...
'StandardFirmata.ino'