标准midi文件使用哪种编码?

2024-10-01 11:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题是怎么提出来的:

with open(path + "/OneChance1.mid") as f:
  for line in f.readline():
        print(line)

在这里,我只是想读一个midi文件来搜索它的内容。然后我收到这个错误消息:UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 153: character maps to <undefined>

如果我使用open()的第二个参数,如:与open(path + "/OneChance1.mid"m encoding='utf-8) as f:一起使用,那么我将收到以下错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 13: invalid start byte

如果我将编码参数改为ascii,我会得到另一个关于序号超出范围的错误。最后我尝试了utf-16,它说文件不是以BOM开头的(这让我笑了起来)。另外,如果我忽略这些错误,我得到的字符与我所期望的数据完全不同。{我的来源是基于这个}

不管怎样,有人知道midi文件使用哪种编码方式吗?我在这方面的研究进展很短,因此我认为值得询问。或者有人可以指出一些其他的可能性或错误?在


Tags: 文件pathinas错误lineopenbyte
2条回答

它是一个二进制文件,不是像你所期望的那样使用文本编码的文本。在

要在Python中以二进制模式打开文件,请将包含"b"的字符串作为第二个参数传递给^{}。在

This page包含格式的说明。在

MIDI文件是二进制内容。但是,通过将文件作为文本文件打开,Python在尝试将文本解码为Unicode时应用默认的系统编码。在

以二进制模式打开文件:

with open(midifile, 'rb') as mfile:
    leader = mfile.read(4)
    if leader != b'MThd':
        raise ValueError('Not a MIDI file!')

如果您想从文件中了解更多信息,就必须研究MIDI standard file format。另请参见What is the structure of a MIDI file?

相关问题 更多 >