Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于MIDI解码Python 3字节对象的问题_Python_Unicode_Utf 8_Decode_Encode - Fatal编程技术网

基于MIDI解码Python 3字节对象的问题

基于MIDI解码Python 3字节对象的问题,python,unicode,utf-8,decode,encode,Python,Unicode,Utf 8,Decode,Encode,我正在处理Python3中的以下字节字符串 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协议发出信息 我的第一个问题是关于结尾处的字母。大多数其他字节都是真正的十六进制值(即我知道b'\x00'应该是空字符)。但是,大写字母S(应该是大写字母S)的显示方式是这样的(ab'S')。根据我看过的ASCII/十

我正在处理Python3中的以下字节字符串

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协议发出信息

我的第一个问题是关于结尾处的字母。大多数其他
字节
都是真正的十六进制值(即我知道
b'\x00'
应该是空字符)。但是,大写字母S(应该是大写字母S)的显示方式是这样的(a
b'S'
)。根据我看过的ASCII/十六进制图表,大写的
S
应该是
x53
(这就是
b'\x53'.decode('utf-8')
返回的内容)

然而,在Python中,当我执行
b'S'.decode('utf-8')
时,它也会返回一个
S
,(怎么可能两者都是呢?)

此外,有些字节(如
b'\xf9'
)实际上是要转义的(这就是为什么它们有
\x
但是,我在尝试解码时遇到了问题。在上述字符串的较长版本上运行
[byteString].decode('utf-8')
时,我得到以下错误:

UnicodeDecodeError:'utf-8'编解码器无法解码位置0中的字节0xf9:无效的开始字节


这些字节不应该被跳过或打印为吗?谢谢它们返回相同的内容,因为
b'\x53'==b'S'
。ASCII表中的其他字符与它们由相同的字节表示的字符相同

您得到了一个
UnicodeDecodeError
,因为您似乎使用了错误的编码。如果我运行
b'\xf9'.decode('iso-8859-1')
我得到了
ù
,那么编码可能是iso-8859-1


但是,我不熟悉MIDI协议,因此您必须查看它,以了解哪些字节需要解释为什么编码。如果将所有给定的字节解码为ISO-8859-1,它不会给我一个有意义的字符串,因此可能意味着这些字节代表其他内容,而不是文本?

我明白了。谢谢您的回答。您能帮助我吗(因为我还在琢磨Python)如下。因此在作为一条消息接收的字节字符串中,只有第二个
b'\x02',b'\x03'
之后的字符需要解码为utf-8。(如果发生这种情况,字符串是有意义的)有没有办法解码一个字节字符串的一部分,而不是全部?@Startec:把你想要的部分切掉,然后解码。