我正在处理Python 3中的以下字符串。
b'\xf9', b'\x02', b'\x03', b'\xf0', b'y', b'\x02', b'\x03', b'S', b'\x00', b't', b'\x00', b'a'
这对我来说是一个非常令人困惑的字节串,因为它来自一个根据MIDI协议发出信息的微控制器。
我的第一个问题是关于最后的字母。大多数其他bytes
都是真正的十六进制值(即我知道b'\x00'
应该是一个空字符)。然而,应该是大写字母S的资本S看起来是这样的(a b'S'
)。根据我看过的ASCII / HEX图表,大写S
应为x53
(这是b'\x53'.decode('utf-8')
返回的内容。
然而,在我做b'S'.decode('utf-8')
的Python时,它也会返回人均S
,(两者又怎么样?)
此外,一些字节(例如b'\xf9'
)确实意味着要进行转义(这就是为什么它们有\x
但是,我在尝试解码时遇到了问题。在上述字符串的较长版本上运行[byteString].decode('utf-8')
我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf9 in position 0: invalid start byte
不应该跳过或打印这些字节吗?感谢
答案 0 :(得分:1)
他们返回同样的东西,因为b'\x53' == b'S'
。它与ASCII表中的其他字符相同,因为它们由相同的字节表示。
您正在获得UnicodeDecodeError
,因为您似乎使用了错误的编码。如果我运行b'\xf9'.decode('iso-8859-1')
,我会ù
,因此编码可能是ISO-8859-1。
但是,我不熟悉MIDI协议,因此您必须查看它以查看需要将哪些字节解释为什么编码。如果将所有给定的字节解码为ISO-8859-1,它不会给我一个有意义的字符串,这可能意味着这些字节代表其他东西,而不是文本?