以下是提出此问题的原因:
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()
像这样使用第二个参数:with,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表开头的(出于某种原因,这让我笑了)。另外,如果我忽略这些错误,则会得到与我期望的数据完全不同的字符。我的期望基于以下来源:http : //www.sonicspot.com/guide/midifiles.html
无论如何,有人知道Midi文件使用哪种编码吗?在这方面,我的研究不足,所以我认为值得提出。也许有人可以指出其他可能性或错误?
MIDI文件是二进制内容。但是,通过将文件打开为文本文件,Python在尝试将文本解码为Unicode时会应用默认的系统编码。
而是以二进制模式打开文件:
with open(midifile, 'rb') as mfile:
leader = mfile.read(4)
if leader != b'MThd':
raise ValueError('Not a MIDI file!')
你必须学习MIDI标准文件格式,如果你想了解从该文件的更多。另请参见MIDI文件的结构是什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句